├── .github
└── FUNDING.yml
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE.txt
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── schemas
│ └── com.keylesspalace.tusky.db.AppDatabase
│ │ ├── 10.json
│ │ ├── 11.json
│ │ ├── 12.json
│ │ ├── 13.json
│ │ ├── 14.json
│ │ ├── 15.json
│ │ ├── 16.json
│ │ ├── 17.json
│ │ ├── 18.json
│ │ ├── 19.json
│ │ ├── 20.json
│ │ ├── 21.json
│ │ ├── 22.json
│ │ ├── 23.json
│ │ ├── 24.json
│ │ ├── 25.json
│ │ ├── 26.json
│ │ └── 27.json
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── keylesspalace
│ │ └── tusky
│ │ ├── ExampleInstrumentedTest.java
│ │ ├── MigrationsTest.kt
│ │ └── TimelineDAOTest.kt
│ ├── blue
│ └── res
│ │ ├── mipmap-anydpi-v26
│ │ └── ic_launcher.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_shortcut_compose.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_shortcut_compose.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_shortcut_compose.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_shortcut_compose.png
│ │ └── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_shortcut_compose.png
│ ├── green
│ └── res
│ │ ├── mipmap-anydpi-v26
│ │ └── ic_launcher.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ └── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ ├── husky
│ └── res
│ │ ├── values-ar
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-ber
│ │ └── husky_generated.xml
│ │ ├── values-bn-rBD
│ │ └── husky_generated.xml
│ │ ├── values-bn-rIN
│ │ └── husky_generated.xml
│ │ ├── values-ca
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-ckb
│ │ └── husky_generated.xml
│ │ ├── values-cs
│ │ └── husky_generated.xml
│ │ ├── values-cy
│ │ └── husky_generated.xml
│ │ ├── values-de
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-en-rAU
│ │ └── husky_generated.xml
│ │ ├── values-en-rGB
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-eo
│ │ └── husky_generated.xml
│ │ ├── values-es
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-eu
│ │ └── husky_generated.xml
│ │ ├── values-fa
│ │ └── husky_generated.xml
│ │ ├── values-fr
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-ga
│ │ └── husky_generated.xml
│ │ ├── values-gd
│ │ └── husky_generated.xml
│ │ ├── values-hi
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-hu
│ │ └── husky_generated.xml
│ │ ├── values-is
│ │ └── husky_generated.xml
│ │ ├── values-it
│ │ └── husky_generated.xml
│ │ ├── values-ja
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-kab
│ │ └── husky_generated.xml
│ │ ├── values-ko
│ │ └── husky_generated.xml
│ │ ├── values-ml
│ │ └── husky_generated.xml
│ │ ├── values-nb-rNO
│ │ └── strings.xml
│ │ ├── values-nl
│ │ └── husky_generated.xml
│ │ ├── values-nn
│ │ └── strings.xml
│ │ ├── values-no-rNB
│ │ └── husky_generated.xml
│ │ ├── values-oc
│ │ └── husky_generated.xml
│ │ ├── values-pa
│ │ └── husky_generated.xml
│ │ ├── values-pl
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-pt-rPT
│ │ └── strings.xml
│ │ ├── values-ru
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-sa
│ │ └── husky_generated.xml
│ │ ├── values-sk
│ │ └── husky_generated.xml
│ │ ├── values-sl
│ │ └── husky_generated.xml
│ │ ├── values-sv
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-ta
│ │ └── husky_generated.xml
│ │ ├── values-te
│ │ └── husky_generated.xml
│ │ ├── values-th
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-tr
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-uk
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ │ ├── values-vi
│ │ └── husky_generated.xml
│ │ ├── values-zh-rCN
│ │ └── husky_generated.xml
│ │ ├── values-zh-rHK
│ │ └── husky_generated.xml
│ │ ├── values-zh-rMO
│ │ └── husky_generated.xml
│ │ ├── values-zh-rSG
│ │ └── husky_generated.xml
│ │ ├── values-zh-rTW
│ │ └── husky_generated.xml
│ │ └── values
│ │ ├── donottranslate.xml
│ │ ├── husky_donottranslate.xml
│ │ ├── husky_generated.xml
│ │ └── strings.xml
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_bbcode.svg
│ ├── ic_html.svg
│ ├── ic_launcher-web.png
│ ├── ic_launcher.svg
│ ├── ic_launcher_.svg
│ ├── ic_launcher_foreground.svg
│ ├── ic_sticker.svg
│ ├── java
│ │ └── com
│ │ │ └── keylesspalace
│ │ │ └── tusky
│ │ │ ├── AboutActivity.kt
│ │ │ ├── AccountActivity.kt
│ │ │ ├── AccountListActivity.kt
│ │ │ ├── AccountsInListFragment.kt
│ │ │ ├── BaseActivity.java
│ │ │ ├── BottomSheetActivity.kt
│ │ │ ├── EditProfileActivity.kt
│ │ │ ├── FiltersActivity.kt
│ │ │ ├── LicenseActivity.kt
│ │ │ ├── ListsActivity.kt
│ │ │ ├── LoginActivity.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── ModalTimelineActivity.kt
│ │ │ ├── SavedTootActivity.java
│ │ │ ├── SplashActivity.kt
│ │ │ ├── StatusListActivity.kt
│ │ │ ├── TabData.kt
│ │ │ ├── TabPreferenceActivity.kt
│ │ │ ├── TuskyApplication.kt
│ │ │ ├── ViewMediaActivity.kt
│ │ │ ├── ViewTagActivity.java
│ │ │ ├── ViewThreadActivity.java
│ │ │ ├── adapter
│ │ │ ├── AccountAdapter.java
│ │ │ ├── AccountFieldAdapter.kt
│ │ │ ├── AccountFieldEditAdapter.kt
│ │ │ ├── AccountSelectionAdapter.kt
│ │ │ ├── AccountViewHolder.java
│ │ │ ├── AddPollOptionsAdapter.kt
│ │ │ ├── BlocksAdapter.java
│ │ │ ├── ChatMessagesAdapter.kt
│ │ │ ├── ChatsAdapter.kt
│ │ │ ├── EmojiAdapter.kt
│ │ │ ├── EmojiReactionsAdapter.java
│ │ │ ├── FollowAdapter.java
│ │ │ ├── FollowRequestViewHolder.kt
│ │ │ ├── FollowRequestsAdapter.java
│ │ │ ├── HashtagViewHolder.kt
│ │ │ ├── ListSelectionAdapter.kt
│ │ │ ├── LoadingFooterViewHolder.kt
│ │ │ ├── MutedStatusViewHolder.java
│ │ │ ├── MutesAdapter.java
│ │ │ ├── NetworkStateViewHolder.kt
│ │ │ ├── NotificationsAdapter.java
│ │ │ ├── PlaceholderViewHolder.java
│ │ │ ├── PollAdapter.kt
│ │ │ ├── PreviewPollOptionsAdapter.kt
│ │ │ ├── SavedTootAdapter.java
│ │ │ ├── SingleViewHolder.java
│ │ │ ├── StatusBaseViewHolder.java
│ │ │ ├── StatusDetailedViewHolder.java
│ │ │ ├── StatusViewHolder.java
│ │ │ ├── StickerAdapater.kt
│ │ │ ├── TabAdapter.kt
│ │ │ ├── ThreadAdapter.java
│ │ │ ├── TimelineAdapter.java
│ │ │ └── UnicodeEmojiAdapter.java
│ │ │ ├── appstore
│ │ │ ├── CacheUpdater.kt
│ │ │ ├── Events.kt
│ │ │ └── EventsHub.kt
│ │ │ ├── components
│ │ │ ├── announcements
│ │ │ │ ├── AnnouncementAdapter.kt
│ │ │ │ ├── AnnouncementsActivity.kt
│ │ │ │ └── AnnouncementsViewModel.kt
│ │ │ ├── chat
│ │ │ │ ├── ChatActivity.kt
│ │ │ │ └── ChatViewModel.kt
│ │ │ ├── common
│ │ │ │ ├── CommonComposeViewModel.kt
│ │ │ │ ├── DownsizeImageTask.java
│ │ │ │ └── MediaUploader.kt
│ │ │ ├── compose
│ │ │ │ ├── ComposeActivity.kt
│ │ │ │ ├── ComposeAutoCompleteAdapter.java
│ │ │ │ ├── ComposeViewModel.kt
│ │ │ │ ├── MediaPreviewAdapter.kt
│ │ │ │ ├── dialog
│ │ │ │ │ ├── AddPollDialog.kt
│ │ │ │ │ └── CaptionDialog.kt
│ │ │ │ └── view
│ │ │ │ │ ├── ComposeOptionsView.kt
│ │ │ │ │ ├── ComposeScheduleView.java
│ │ │ │ │ ├── EditTextTyped.kt
│ │ │ │ │ ├── PollPreviewView.kt
│ │ │ │ │ ├── ProgressImageView.java
│ │ │ │ │ ├── ProgressTextView.java
│ │ │ │ │ └── TootButton.kt
│ │ │ ├── conversation
│ │ │ │ ├── ConversationAdapter.kt
│ │ │ │ ├── ConversationEntity.kt
│ │ │ │ ├── ConversationViewHolder.java
│ │ │ │ ├── ConversationsBoundaryCallback.kt
│ │ │ │ ├── ConversationsFragment.kt
│ │ │ │ ├── ConversationsRepository.kt
│ │ │ │ └── ConversationsViewModel.kt
│ │ │ ├── drafts
│ │ │ │ ├── DraftHelper.kt
│ │ │ │ ├── DraftMediaAdapter.kt
│ │ │ │ ├── DraftsActivity.kt
│ │ │ │ ├── DraftsAdapter.kt
│ │ │ │ └── DraftsViewModel.kt
│ │ │ ├── instancemute
│ │ │ │ ├── InstanceListActivity.kt
│ │ │ │ ├── adapter
│ │ │ │ │ └── DomainMutesAdapter.kt
│ │ │ │ ├── fragment
│ │ │ │ │ └── InstanceListFragment.kt
│ │ │ │ └── interfaces
│ │ │ │ │ └── InstanceActionListener.kt
│ │ │ ├── notifications
│ │ │ │ ├── NotificationFetcher.kt
│ │ │ │ ├── NotificationHelper.java
│ │ │ │ ├── NotificationWorker.kt
│ │ │ │ └── Notifier.kt
│ │ │ ├── preference
│ │ │ │ ├── AccountPreferencesFragment.kt
│ │ │ │ ├── EmojiPreference.kt
│ │ │ │ ├── NotificationPreferencesFragment.kt
│ │ │ │ ├── PreferencesActivity.kt
│ │ │ │ ├── PreferencesFragment.kt
│ │ │ │ ├── ProxyPreferencesFragment.kt
│ │ │ │ └── TabFilterPreferencesFragment.kt
│ │ │ ├── report
│ │ │ │ ├── ReportActivity.kt
│ │ │ │ ├── ReportViewModel.kt
│ │ │ │ ├── Screen.kt
│ │ │ │ ├── adapter
│ │ │ │ │ ├── AdapterHandler.kt
│ │ │ │ │ ├── ReportPagerAdapter.kt
│ │ │ │ │ ├── StatusViewHolder.kt
│ │ │ │ │ ├── StatusesAdapter.kt
│ │ │ │ │ ├── StatusesDataSource.kt
│ │ │ │ │ ├── StatusesDataSourceFactory.kt
│ │ │ │ │ └── StatusesRepository.kt
│ │ │ │ ├── fragments
│ │ │ │ │ ├── ReportDoneFragment.kt
│ │ │ │ │ ├── ReportNoteFragment.kt
│ │ │ │ │ └── ReportStatusesFragment.kt
│ │ │ │ └── model
│ │ │ │ │ └── StatusViewState.kt
│ │ │ ├── scheduled
│ │ │ │ ├── ScheduledTootActivity.kt
│ │ │ │ ├── ScheduledTootAdapter.kt
│ │ │ │ ├── ScheduledTootDataSource.kt
│ │ │ │ └── ScheduledTootViewModel.kt
│ │ │ └── search
│ │ │ │ ├── SearchActivity.kt
│ │ │ │ ├── SearchType.kt
│ │ │ │ ├── SearchViewModel.kt
│ │ │ │ ├── adapter
│ │ │ │ ├── SearchAccountsAdapter.kt
│ │ │ │ ├── SearchDataSource.kt
│ │ │ │ ├── SearchDataSourceFactory.kt
│ │ │ │ ├── SearchHashtagsAdapter.kt
│ │ │ │ ├── SearchPagerAdapter.kt
│ │ │ │ ├── SearchRepository.kt
│ │ │ │ └── SearchStatusesAdapter.kt
│ │ │ │ └── fragments
│ │ │ │ ├── SearchAccountsFragment.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchHashtagsFragment.kt
│ │ │ │ └── SearchStatusesFragment.kt
│ │ │ ├── db
│ │ │ ├── AccountDao.kt
│ │ │ ├── AccountEntity.kt
│ │ │ ├── AccountManager.kt
│ │ │ ├── AppDatabase.java
│ │ │ ├── ChatEntity.kt
│ │ │ ├── ChatMessageEntity.kt
│ │ │ ├── ChatsDao.kt
│ │ │ ├── ConversationsDao.kt
│ │ │ ├── Converters.kt
│ │ │ ├── DraftDao.kt
│ │ │ ├── DraftEntity.kt
│ │ │ ├── InstanceDao.kt
│ │ │ ├── InstanceEntity.kt
│ │ │ ├── TimelineDao.kt
│ │ │ ├── TimelineStatusEntity.kt
│ │ │ ├── TootDao.java
│ │ │ └── TootEntity.java
│ │ │ ├── di
│ │ │ ├── ActivitiesModule.kt
│ │ │ ├── AppComponent.kt
│ │ │ ├── AppInjector.kt
│ │ │ ├── AppModule.kt
│ │ │ ├── BroadcastReceiverModule.kt
│ │ │ ├── FragmentBuildersModule.kt
│ │ │ ├── GlideModule.kt
│ │ │ ├── Injectable.kt
│ │ │ ├── MediaUploaderModule.kt
│ │ │ ├── NetworkModule.kt
│ │ │ ├── RepositoryModule.kt
│ │ │ ├── ServicesModule.kt
│ │ │ └── ViewModelFactory.kt
│ │ │ ├── entity
│ │ │ ├── AccessToken.kt
│ │ │ ├── Account.kt
│ │ │ ├── Announcement.kt
│ │ │ ├── AppCredentials.kt
│ │ │ ├── Attachment.kt
│ │ │ ├── Card.kt
│ │ │ ├── Chat.kt
│ │ │ ├── Conversation.kt
│ │ │ ├── DeletedStatus.kt
│ │ │ ├── Emoji.kt
│ │ │ ├── Filter.kt
│ │ │ ├── HashTag.kt
│ │ │ ├── IdentityProof.kt
│ │ │ ├── Instance.kt
│ │ │ ├── Marker.kt
│ │ │ ├── MastoList.kt
│ │ │ ├── NewStatus.kt
│ │ │ ├── NodeInfo.kt
│ │ │ ├── Notification.kt
│ │ │ ├── Poll.kt
│ │ │ ├── Relationship.kt
│ │ │ ├── ScheduledStatus.kt
│ │ │ ├── SearchResult.kt
│ │ │ ├── Status.kt
│ │ │ ├── StatusContext.kt
│ │ │ ├── StatusParams.kt
│ │ │ ├── Sticker.kt
│ │ │ └── StreamEvent.kt
│ │ │ ├── fragment
│ │ │ ├── AccountListFragment.kt
│ │ │ ├── AccountMediaFragment.kt
│ │ │ ├── BaseFragment.java
│ │ │ ├── ChatsFragment.kt
│ │ │ ├── NotificationsFragment.java
│ │ │ ├── SFragment.java
│ │ │ ├── TimePickerFragment.java
│ │ │ ├── TimelineFragment.java
│ │ │ ├── ViewImageFragment.kt
│ │ │ ├── ViewMediaFragment.kt
│ │ │ ├── ViewThreadFragment.java
│ │ │ └── ViewVideoFragment.kt
│ │ │ ├── interfaces
│ │ │ ├── AccountActionListener.java
│ │ │ ├── AccountSelectionListener.kt
│ │ │ ├── ActionButtonActivity.java
│ │ │ ├── ChatActionListener.kt
│ │ │ ├── LinkListener.java
│ │ │ ├── PermissionRequester.java
│ │ │ ├── RefreshableFragment.kt
│ │ │ ├── ReselectableFragment.kt
│ │ │ └── StatusActionListener.java
│ │ │ ├── json
│ │ │ └── SpannedTypeAdapter.kt
│ │ │ ├── network
│ │ │ ├── InstanceSwitchAuthInterceptor.java
│ │ │ ├── MastodonApi.kt
│ │ │ ├── ProgressRequestBody.java
│ │ │ └── TimelineCases.kt
│ │ │ ├── pager
│ │ │ ├── AccountPagerAdapter.kt
│ │ │ ├── AvatarImagePagerAdapter.kt
│ │ │ ├── ImagePagerAdapter.kt
│ │ │ └── MainPagerAdapter.kt
│ │ │ ├── receiver
│ │ │ ├── NotificationClearBroadcastReceiver.kt
│ │ │ └── SendStatusBroadcastReceiver.kt
│ │ │ ├── repository
│ │ │ ├── ChatRepository.kt
│ │ │ └── TimelineRepository.kt
│ │ │ ├── service
│ │ │ ├── SendTootService.kt
│ │ │ ├── ServiceClient.kt
│ │ │ ├── StreamingService.kt
│ │ │ └── TuskyTileService.kt
│ │ │ ├── settings
│ │ │ ├── SettingsConstants.kt
│ │ │ └── SettingsDSL.kt
│ │ │ ├── util
│ │ │ ├── BBCodeEdit.java
│ │ │ ├── BiListing.kt
│ │ │ ├── BindingViewHolder.kt
│ │ │ ├── BlurHashDecoder.kt
│ │ │ ├── CardViewMode.kt
│ │ │ ├── ClickableSpanNoUnderline.kt
│ │ │ ├── ComposeTokenizer.kt
│ │ │ ├── CustomEmojiHelper.kt
│ │ │ ├── CustomFragmentStateAdapter.kt
│ │ │ ├── CustomURLSpan.java
│ │ │ ├── Either.kt
│ │ │ ├── EmojiCompatFont.kt
│ │ │ ├── Emojis.java
│ │ │ ├── FocalPointUtil.kt
│ │ │ ├── HTMLEdit.java
│ │ │ ├── HttpHeaderLink.java
│ │ │ ├── IOUtils.java
│ │ │ ├── ImageLoadingHelper.kt
│ │ │ ├── LinkHelper.java
│ │ │ ├── ListStatusAccessibilityDelegate.kt
│ │ │ ├── ListUtils.kt
│ │ │ ├── Listing.kt
│ │ │ ├── LiveDataUtil.kt
│ │ │ ├── LocaleManager.kt
│ │ │ ├── MediaUtils.kt
│ │ │ ├── NetworkState.kt
│ │ │ ├── NotificationTypeConverter.kt
│ │ │ ├── OkHttpUtils.java
│ │ │ ├── OmittedDomainFetcher.kt
│ │ │ ├── PagingRequestHelper.java
│ │ │ ├── PairedList.java
│ │ │ ├── Resource.kt
│ │ │ ├── RxAwareViewModel.kt
│ │ │ ├── SaveTootHelper.java
│ │ │ ├── ShareShortcutHelper.kt
│ │ │ ├── SharedPreferencesExtensions.kt
│ │ │ ├── SmartLengthInputFilter.kt
│ │ │ ├── SpanUtils.kt
│ │ │ ├── StatusDisplayOptions.kt
│ │ │ ├── StatusViewHelper.kt
│ │ │ ├── StringUtils.kt
│ │ │ ├── ThemeUtils.java
│ │ │ ├── TimestampUtils.java
│ │ │ ├── VersionUtils.java
│ │ │ ├── ViewDataUtils.java
│ │ │ ├── ViewExtensions.kt
│ │ │ ├── ViewPager2Fix.java
│ │ │ └── getErrorMessage.kt
│ │ │ ├── view
│ │ │ ├── BackgroundMessageView.kt
│ │ │ ├── BezelImageView.java
│ │ │ ├── ConversationLineItemDecoration.kt
│ │ │ ├── CustomEmojiTextView.kt
│ │ │ ├── EmojiKeyboard.java
│ │ │ ├── EmojiPicker.kt
│ │ │ ├── EndlessOnScrollListener.java
│ │ │ ├── ExposedPlayPauseVideoView.kt
│ │ │ ├── LicenseCard.kt
│ │ │ ├── MediaPreviewImageView.kt
│ │ │ ├── MuteAccountDialog.kt
│ │ │ ├── SquareImageView.kt
│ │ │ └── StatusView.kt
│ │ │ ├── viewdata
│ │ │ ├── AttachmentViewData.kt
│ │ │ ├── ChatViewData.kt
│ │ │ ├── NotificationViewData.java
│ │ │ ├── PollViewData.kt
│ │ │ └── StatusViewData.java
│ │ │ └── viewmodel
│ │ │ ├── AccountViewModel.kt
│ │ │ ├── AccountsInListViewModel.kt
│ │ │ ├── EditProfileViewModel.kt
│ │ │ └── ListsViewModel.kt
│ ├── res
│ │ ├── anim
│ │ │ ├── explode.xml
│ │ │ ├── fade_in.xml
│ │ │ ├── fade_out.xml
│ │ │ ├── slide_from_left.xml
│ │ │ ├── slide_from_right.xml
│ │ │ ├── slide_to_left.xml
│ │ │ └── slide_to_right.xml
│ │ ├── color
│ │ │ ├── account_tab_font_color.xml
│ │ │ ├── color_background_transparent_60.xml
│ │ │ ├── compound_button_color.xml
│ │ │ ├── emoji_reaction_button.xml
│ │ │ └── text_input_layout_box_stroke_color.xml
│ │ ├── drawable-hdpi
│ │ │ ├── elephant_error.png
│ │ │ ├── elephant_friend.png
│ │ │ ├── elephant_friend_empty.png
│ │ │ ├── elephant_offline.png
│ │ │ ├── ic_notify.png
│ │ │ └── splash.png
│ │ ├── drawable-mdpi
│ │ │ ├── elephant_error.png
│ │ │ ├── elephant_friend.png
│ │ │ ├── elephant_friend_empty.png
│ │ │ ├── elephant_offline.png
│ │ │ ├── ic_notify.png
│ │ │ └── splash.png
│ │ ├── drawable-v24
│ │ │ └── ic_notoemoji.xml
│ │ ├── drawable-v26
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ └── launcher_shadow_gradient.xml
│ │ ├── drawable-xhdpi
│ │ │ ├── elephant_error.png
│ │ │ ├── elephant_friend.png
│ │ │ ├── elephant_friend_empty.png
│ │ │ ├── elephant_offline.png
│ │ │ ├── ic_notify.png
│ │ │ └── splash.png
│ │ ├── drawable-xxhdpi
│ │ │ ├── elephant_error.png
│ │ │ ├── elephant_friend.png
│ │ │ ├── elephant_friend_empty.png
│ │ │ ├── elephant_offline.png
│ │ │ ├── ic_notify.png
│ │ │ └── splash.png
│ │ ├── drawable-xxxhdpi
│ │ │ ├── elephant_error.png
│ │ │ ├── elephant_friend.png
│ │ │ ├── elephant_friend_empty.png
│ │ │ ├── elephant_offline.png
│ │ │ ├── ic_notify.png
│ │ │ └── splash.png
│ │ ├── drawable
│ │ │ ├── avatar_border.xml
│ │ │ ├── avatar_default.xml
│ │ │ ├── background_dialog_activity.xml
│ │ │ ├── background_splash.xml
│ │ │ ├── card_frame.xml
│ │ │ ├── card_image_placeholder.xml
│ │ │ ├── conversation_thread_line.xml
│ │ │ ├── description_bg_expanded.xml
│ │ │ ├── ic_access_time.xml
│ │ │ ├── ic_account_settings.xml
│ │ │ ├── ic_add_a_photo_32dp.xml
│ │ │ ├── ic_alert_circle.xml
│ │ │ ├── ic_attach_file_24dp.xml
│ │ │ ├── ic_bbcode_24dp.xml
│ │ │ ├── ic_blobmoji.xml
│ │ │ ├── ic_bookmark_24dp.xml
│ │ │ ├── ic_bookmark_active_24dp.xml
│ │ │ ├── ic_bot_24dp.xml
│ │ │ ├── ic_briefcase.xml
│ │ │ ├── ic_bullhorn_24dp.xml
│ │ │ ├── ic_cancel_24dp.xml
│ │ │ ├── ic_check_24dp.xml
│ │ │ ├── ic_check_32dp.xml
│ │ │ ├── ic_check_box_outline_blank_18dp.xml
│ │ │ ├── ic_check_circle.xml
│ │ │ ├── ic_clear_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_create_24dp.xml
│ │ │ ├── ic_cw_24dp.xml
│ │ │ ├── ic_drag_indicator_24dp.xml
│ │ │ ├── ic_drag_indicator_horiz_24dp.xml
│ │ │ ├── ic_email_24dp.xml
│ │ │ ├── ic_emoji_24dp.xml
│ │ │ ├── ic_emoji_34dp.xml
│ │ │ ├── ic_exit_to_app_24px.xml
│ │ │ ├── ic_eye_24dp.xml
│ │ │ ├── ic_favourite_24dp.xml
│ │ │ ├── ic_favourite_active_24dp.xml
│ │ │ ├── ic_file_download_black_24dp.xml
│ │ │ ├── ic_forum_24px.xml
│ │ │ ├── ic_hashtag.xml
│ │ │ ├── ic_hide_media_24dp.xml
│ │ │ ├── ic_home_24dp.xml
│ │ │ ├── ic_html_24dp.xml
│ │ │ ├── ic_list.xml
│ │ │ ├── ic_local_24dp.xml
│ │ │ ├── ic_lock_open_24dp.xml
│ │ │ ├── ic_lock_outline_24dp.xml
│ │ │ ├── ic_logout.xml
│ │ │ ├── ic_markdown.xml
│ │ │ ├── ic_menu_share_24dp.xml
│ │ │ ├── ic_more_horiz_24dp.xml
│ │ │ ├── ic_music_box_24dp.xml
│ │ │ ├── ic_music_box_preview_24dp.xml
│ │ │ ├── ic_mute_24dp.xml
│ │ │ ├── ic_notebook.xml
│ │ │ ├── ic_notifications_24dp.xml
│ │ │ ├── ic_notifications_active_24dp.xml
│ │ │ ├── ic_notifications_off_24dp.xml
│ │ │ ├── ic_notoemoji.xml
│ │ │ ├── ic_person_add_24dp.xml
│ │ │ ├── ic_photo_24dp.xml
│ │ │ ├── ic_play_indicator.xml
│ │ │ ├── ic_plus_24dp.xml
│ │ │ ├── ic_poll_24dp.xml
│ │ │ ├── ic_preview_24dp.xml
│ │ │ ├── ic_public_24dp.xml
│ │ │ ├── ic_radio_button_unchecked_18dp.xml
│ │ │ ├── ic_reblog_18dp.xml
│ │ │ ├── ic_reblog_24dp.xml
│ │ │ ├── ic_reblog_active_24dp.xml
│ │ │ ├── ic_reblog_direct_24dp.xml
│ │ │ ├── ic_reblog_private_24dp.xml
│ │ │ ├── ic_reblog_private_active_24dp.xml
│ │ │ ├── ic_reject_24dp.xml
│ │ │ ├── ic_repeat_24dp.xml
│ │ │ ├── ic_reply_18dp.xml
│ │ │ ├── ic_reply_24dp.xml
│ │ │ ├── ic_reply_all_24dp.xml
│ │ │ ├── ic_send_24dp.xml
│ │ │ ├── ic_settings.xml
│ │ │ ├── ic_star_24dp.xml
│ │ │ ├── ic_sticker.xml
│ │ │ ├── ic_tabs.xml
│ │ │ ├── ic_tusky.xml
│ │ │ ├── ic_twemoji.xml
│ │ │ ├── ic_unmute_24dp.xml
│ │ │ ├── ic_videocam_24dp.xml
│ │ │ ├── materialdrawer_shape_large.xml
│ │ │ ├── materialdrawer_shape_small.xml
│ │ │ ├── md_bold.xml
│ │ │ ├── md_code.xml
│ │ │ ├── md_italic.xml
│ │ │ ├── md_link.xml
│ │ │ ├── md_strikethrough.xml
│ │ │ ├── media_preview_outline.xml
│ │ │ ├── media_warning_bg.xml
│ │ │ ├── message_background.xml
│ │ │ ├── poll_option_background.xml
│ │ │ ├── poll_option_shape.xml
│ │ │ ├── profile_badge_background.xml
│ │ │ ├── report_success_background.xml
│ │ │ ├── round_button.xml
│ │ │ ├── spellcheck.xml
│ │ │ ├── status_divider.xml
│ │ │ └── unread_shape.xml
│ │ ├── layout-land
│ │ │ └── fragment_report_done.xml
│ │ ├── layout-sw640dp
│ │ │ ├── fragment_timeline.xml
│ │ │ ├── fragment_timeline_notifications.xml
│ │ │ └── fragment_view_thread.xml
│ │ ├── layout
│ │ │ ├── activity_about.xml
│ │ │ ├── activity_account.xml
│ │ │ ├── activity_account_list.xml
│ │ │ ├── activity_announcements.xml
│ │ │ ├── activity_chat.xml
│ │ │ ├── activity_compose.xml
│ │ │ ├── activity_drafts.xml
│ │ │ ├── activity_edit_profile.xml
│ │ │ ├── activity_filters.xml
│ │ │ ├── activity_license.xml
│ │ │ ├── activity_lists.xml
│ │ │ ├── activity_login.xml
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_modal_timeline.xml
│ │ │ ├── activity_preferences.xml
│ │ │ ├── activity_report.xml
│ │ │ ├── activity_saved_toot.xml
│ │ │ ├── activity_scheduled_toot.xml
│ │ │ ├── activity_search.xml
│ │ │ ├── activity_statuslist.xml
│ │ │ ├── activity_tab_preference.xml
│ │ │ ├── activity_view_media.xml
│ │ │ ├── activity_view_tag.xml
│ │ │ ├── activity_view_thread.xml
│ │ │ ├── card_license.xml
│ │ │ ├── dialog_add_poll.xml
│ │ │ ├── dialog_emoji_keyboard.xml
│ │ │ ├── dialog_emojicompat.xml
│ │ │ ├── dialog_filter.xml
│ │ │ ├── dialog_mute_account.xml
│ │ │ ├── fragment_account_list.xml
│ │ │ ├── fragment_accounts_in_list.xml
│ │ │ ├── fragment_instance_list.xml
│ │ │ ├── fragment_report_done.xml
│ │ │ ├── fragment_report_note.xml
│ │ │ ├── fragment_report_statuses.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_timeline.xml
│ │ │ ├── fragment_timeline_notifications.xml
│ │ │ ├── fragment_view_image.xml
│ │ │ ├── fragment_view_thread.xml
│ │ │ ├── fragment_view_video.xml
│ │ │ ├── item_account.xml
│ │ │ ├── item_account_field.xml
│ │ │ ├── item_add_poll_option.xml
│ │ │ ├── item_announcement.xml
│ │ │ ├── item_autocomplete_account.xml
│ │ │ ├── item_autocomplete_divider.xml
│ │ │ ├── item_autocomplete_emoji.xml
│ │ │ ├── item_autocomplete_hashtag.xml
│ │ │ ├── item_blocked_user.xml
│ │ │ ├── item_chat.xml
│ │ │ ├── item_conversation.xml
│ │ │ ├── item_draft.xml
│ │ │ ├── item_edit_field.xml
│ │ │ ├── item_emoji_button.xml
│ │ │ ├── item_emoji_keyboard_emoji.xml
│ │ │ ├── item_emoji_keyboard_page.xml
│ │ │ ├── item_emoji_keyboard_sticker.xml
│ │ │ ├── item_emoji_picker.xml
│ │ │ ├── item_emoji_pref.xml
│ │ │ ├── item_emoji_reaction.xml
│ │ │ ├── item_follow.xml
│ │ │ ├── item_follow_request.xml
│ │ │ ├── item_follow_request_notification.xml
│ │ │ ├── item_footer.xml
│ │ │ ├── item_hashtag.xml
│ │ │ ├── item_list.xml
│ │ │ ├── item_media_preview.xml
│ │ │ ├── item_muted_domain.xml
│ │ │ ├── item_muted_user.xml
│ │ │ ├── item_network_state.xml
│ │ │ ├── item_our_message.xml
│ │ │ ├── item_picker_list.xml
│ │ │ ├── item_poll.xml
│ │ │ ├── item_poll_preview_option.xml
│ │ │ ├── item_report_status.xml
│ │ │ ├── item_saved_toot.xml
│ │ │ ├── item_scheduled_toot.xml
│ │ │ ├── item_status.xml
│ │ │ ├── item_status_bottom_sheet.xml
│ │ │ ├── item_status_detailed.xml
│ │ │ ├── item_status_muted.xml
│ │ │ ├── item_status_notification.xml
│ │ │ ├── item_status_placeholder.xml
│ │ │ ├── item_tab_preference.xml
│ │ │ ├── item_tab_preference_small.xml
│ │ │ ├── item_their_message.xml
│ │ │ ├── material_drawer_header.xml
│ │ │ ├── notifications_filter.xml
│ │ │ ├── search_view.xml
│ │ │ ├── toolbar_basic.xml
│ │ │ ├── view_account_moved.xml
│ │ │ ├── view_background_message.xml
│ │ │ ├── view_compose_options.xml
│ │ │ ├── view_compose_schedule.xml
│ │ │ └── view_poll_preview.xml
│ │ ├── menu
│ │ │ ├── account_toolbar.xml
│ │ │ ├── chat_more.xml
│ │ │ ├── drafts.xml
│ │ │ ├── edit_profile_toolbar.xml
│ │ │ ├── emoji_reaction_more.xml
│ │ │ ├── list_actions.xml
│ │ │ ├── search_toolbar.xml
│ │ │ ├── status_more.xml
│ │ │ ├── status_more_for_user.xml
│ │ │ ├── view_media_toolbar.xml
│ │ │ └── view_thread_toolbar.xml
│ │ ├── raw
│ │ │ └── apache.txt
│ │ ├── values-ar
│ │ │ └── strings.xml
│ │ ├── values-ber
│ │ │ └── strings.xml
│ │ ├── values-bn-rBD
│ │ │ └── strings.xml
│ │ ├── values-bn-rIN
│ │ │ └── strings.xml
│ │ ├── values-ca
│ │ │ └── strings.xml
│ │ ├── values-ckb
│ │ │ └── strings.xml
│ │ ├── values-cs
│ │ │ └── strings.xml
│ │ ├── values-cy
│ │ │ └── strings.xml
│ │ ├── values-de
│ │ │ └── strings.xml
│ │ ├── values-en-rAU
│ │ │ └── strings.xml
│ │ ├── values-en-rGB
│ │ │ └── strings.xml
│ │ ├── values-eo
│ │ │ └── strings.xml
│ │ ├── values-es
│ │ │ └── strings.xml
│ │ ├── values-eu
│ │ │ └── strings.xml
│ │ ├── values-fa
│ │ │ └── strings.xml
│ │ ├── values-fr
│ │ │ └── strings.xml
│ │ ├── values-ga
│ │ │ └── strings.xml
│ │ ├── values-gd
│ │ │ └── strings.xml
│ │ ├── values-hi
│ │ │ └── strings.xml
│ │ ├── values-hu
│ │ │ └── strings.xml
│ │ ├── values-is
│ │ │ └── strings.xml
│ │ ├── values-it
│ │ │ └── strings.xml
│ │ ├── values-ja
│ │ │ └── strings.xml
│ │ ├── values-kab
│ │ │ └── strings.xml
│ │ ├── values-ko
│ │ │ └── strings.xml
│ │ ├── values-large
│ │ │ ├── dimens.xml
│ │ │ └── styles.xml
│ │ ├── values-ml
│ │ │ └── strings.xml
│ │ ├── values-night
│ │ │ └── theme_colors.xml
│ │ ├── values-nl
│ │ │ └── strings.xml
│ │ ├── values-no-rNB
│ │ │ └── strings.xml
│ │ ├── values-oc
│ │ │ └── strings.xml
│ │ ├── values-pa
│ │ │ └── strings.xml
│ │ ├── values-pl
│ │ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ │ └── strings.xml
│ │ ├── values-ru
│ │ │ └── strings.xml
│ │ ├── values-sa
│ │ │ └── strings.xml
│ │ ├── values-sk
│ │ │ └── strings.xml
│ │ ├── values-sl
│ │ │ └── strings.xml
│ │ ├── values-small
│ │ │ └── integer.xml
│ │ ├── values-sv
│ │ │ └── strings.xml
│ │ ├── values-sw380dp
│ │ │ └── toot_button.xml
│ │ ├── values-ta
│ │ │ └── strings.xml
│ │ ├── values-te
│ │ │ └── strings.xml
│ │ ├── values-th
│ │ │ └── strings.xml
│ │ ├── values-tr
│ │ │ └── strings.xml
│ │ ├── values-uk
│ │ │ └── strings.xml
│ │ ├── values-v27
│ │ │ └── styles.xml
│ │ ├── values-vi
│ │ │ └── strings.xml
│ │ ├── values-w640dp
│ │ │ └── dimens.xml
│ │ ├── values-zh-rCN
│ │ │ └── strings.xml
│ │ ├── values-zh-rHK
│ │ │ └── strings.xml
│ │ ├── values-zh-rMO
│ │ │ └── strings.xml
│ │ ├── values-zh-rSG
│ │ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ │ └── strings.xml
│ │ ├── values
│ │ │ ├── actions.xml
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── donottranslate.xml
│ │ │ ├── ids.xml
│ │ │ ├── integers.xml
│ │ │ ├── string-arrays.xml
│ │ │ ├── strings.xml
│ │ │ ├── styles.xml
│ │ │ ├── theme_colors.xml
│ │ │ └── toot_button.xml
│ │ └── xml
│ │ │ ├── file_paths.xml
│ │ │ ├── searchable.xml
│ │ │ └── share_shortcuts.xml
│ └── splash.svg
│ └── test
│ └── java
│ ├── android
│ └── text
│ │ └── FakeSpannableString.kt
│ └── com
│ └── keylesspalace
│ └── tusky
│ ├── BottomSheetActivityTest.kt
│ ├── ComposeActivityTest.kt
│ ├── ComposeTokenizerTest.kt
│ ├── FilterTest.kt
│ ├── FocalPointUtilTest.kt
│ ├── SpanUtilsTest.kt
│ ├── StringUtilsTest.kt
│ ├── TuskyApplication.kt
│ ├── fragment
│ └── TimelineRepositoryTest.kt
│ └── util
│ ├── EmojiCompatFontTest.kt
│ ├── SmartLengthInputFilterTest.kt
│ ├── VersionUtilsTest.kt
│ └── ViewPager2FixTest.java
├── assets
├── avatar_default.svg
├── fdroid_badge.png
├── splash.xcf
└── tusky_logo_borderless.png
├── build.gradle
├── debug.keystore
├── fastlane
└── metadata
│ └── android
│ ├── en-US
│ ├── changelogs
│ │ ├── 167.txt
│ │ └── 168.txt
│ ├── full_description.txt
│ ├── images
│ │ ├── featureGraphic.png
│ │ ├── icon.png
│ │ └── phoneScreenshots
│ │ │ ├── 00_login.png
│ │ │ ├── 01_timeline.png
│ │ │ ├── 02_compose.png
│ │ │ ├── 03_profile.png
│ │ │ └── 04_emojis.png
│ ├── short_description.txt
│ └── title.txt
│ └── ru
│ ├── changelogs
│ ├── 167.txt
│ └── 168.txt
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── instance-build.gradle
├── scripts
├── import_translations.sh
└── xq.py
└── settings.gradle
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | open_collective: tusky
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | app/release
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | * * * *
4 | - Husky Version:
5 | - Android Version:
6 | - Android Device:
7 | - Fediverse instance (if applicable):
8 |
9 | - [ ] I searched or browsed the repo’s other issues to ensure this is not a duplicate.
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | MOVED TO: https://git.sr.ht/~captainepoch/husky
2 |
3 | DOWNLOADS ARE HERE: https://git.sr.ht/~captainepoch/husky/refs
4 |
5 | NEW MAINTAINER IS @captainepoch@stereophonic.space
6 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | app-release.apk
3 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/keylesspalace/tusky/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/androidTest/java/com/keylesspalace/tusky/ExampleInstrumentedTest.java
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-hdpi/ic_shortcut_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-hdpi/ic_shortcut_compose.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-mdpi/ic_shortcut_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-mdpi/ic_shortcut_compose.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-xhdpi/ic_shortcut_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-xhdpi/ic_shortcut_compose.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-xxhdpi/ic_shortcut_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-xxhdpi/ic_shortcut_compose.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/blue/res/mipmap-xxxhdpi/ic_shortcut_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/blue/res/mipmap-xxxhdpi/ic_shortcut_compose.png
--------------------------------------------------------------------------------
/app/src/green/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/green/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/green/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/green/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/green/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/green/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/green/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/green/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/green/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/green/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/green/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/husky/res/values-ar/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-ber/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | ⵇⵇⴻⵏ ⵖⴻⵔ ⵎⴰⵚⵟⵓⴷⵓⵏ
8 |
9 |
10 | ⵔⵏⵓ ⵢⵉⵡⴻⵏ ⵏ ⵓⵎⵉⴹⴰⵏ ⴰⵎⴰⵢⵏⵓⵝ ⵏ ⵎⴰⵚⵟⵓⴷⵓⵏ
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-en-rAU/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-en-rGB/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-en-rGB/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | %s favourited your post
4 | Scheduled posts
5 | Reply to
6 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-gd/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Clàraich a-steach le Pleroma
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-hi/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | जवाब दे
4 | किसने प्रतिक्रिया व्यक्त की
5 | प्रतिक्रिया
6 | प्रतिक्रिया निकालें
7 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-ja/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 返信
4 | 絵文字反応
5 | 誰が反応したか
6 | 可能にする %s
7 | 無効にする %s
8 | アプリの名前
9 | アプリのウェブサイト
10 | 管理者
11 | モデレーター
12 | 反応を削除
13 | ファイルが大きすぎます
14 | 絵文字反応
15 | リピートを表示
16 | %s 誰が反応したか
17 | ミュートされたユーザーを隠す
18 | リピート
19 | リピートを削除
20 | リピートを隠す
21 | リピートを表示
22 | リピートを削除
23 | 削除しますか\?
24 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-kab/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Husky %s
4 |
5 |
6 | Amaɣnu n Husky
7 |
8 |
9 | Yettwamdemmar s Husky
10 |
11 |
12 |
13 |
14 |
15 | Asmel Web n usenfaṛ:
16 | \n https://huskyapp.dev
17 |
18 |
19 |
20 |
21 |
22 | Qqen ɣer Maṣṭudun
23 |
24 |
25 | Rnu yiwen umiḍan amaynut n Maṣṭudun
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-ml/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | മസ്റ്റഡോൺ വഴി പ്രവേശിക്കുക
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-nn/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Svar på
4 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-pa/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-pt-rPT/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-sk/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Prihlásiť sa účtom Pleroma
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-te/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-uk/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Увійти
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-zh-rHK/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Husky 是基於 GNU General Public License Version 3 許可證開源的自由軟體完整的許可證協議:https://www.gnu.org/licenses/gpl-3.0.en.html
4 |
5 |
6 | Husky 官方帳號
7 |
8 |
9 | 你需要重啟 Husky 才能生效
10 |
11 |
12 | Husky 使用了以下開源專案的原始碼:
13 |
14 |
15 |
16 |
17 |
18 |
19 | 專案網站:\n
20 | https://huskyapp.dev
21 |
22 |
23 |
24 |
25 |
26 |
27 | 問題回報:\n
28 | https://git.mentality.rip/FWGS/Husky/issues
29 |
30 |
31 |
32 |
33 |
34 | 登入 Pleroma 帳號
35 |
36 |
37 | 加入新的 Pleroma 帳號
38 |
39 |
40 |
41 |
42 | 請輸入你帳號所在的 Mastodon 站點的域名或地址
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-zh-rMO/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Husky 是基於 GNU General Public License Version 3 許可證開源的自由軟體完整的許可證協議:https://www.gnu.org/licenses/gpl-3.0.en.html
4 |
5 |
6 | Husky 官方帳號
7 |
8 |
9 | 你需要重啟 Husky 才能生效
10 |
11 |
12 | Husky 使用了以下開源專案的原始碼:
13 |
14 |
15 |
16 |
17 |
18 |
19 | 專案網站:\n
20 | https://huskyapp.dev
21 |
22 |
23 |
24 |
25 |
26 |
27 | 問題回報:\n
28 | https://git.mentality.rip/FWGS/Husky/issues
29 |
30 |
31 |
32 |
33 |
34 | 登入 Pleroma 帳號
35 |
36 |
37 | 加入新的 Pleroma 帳號
38 |
39 |
40 |
41 |
42 | 請輸入你帳號所在的 Mastodon 站點的域名或地址
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/husky/res/values-zh-rTW/husky_generated.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Husky 是基於 GNU General Public License Version 3 許可證開源的自由軟體完整的許可證協議:https://www.gnu.org/licenses/gpl-3.0.en.html
4 |
5 |
6 | Husky 官方帳號
7 |
8 |
9 | 你需要重啟 Husky 才能生效
10 |
11 |
12 | Husky 使用了以下開源專案的原始碼:
13 |
14 |
15 | Husky %s
16 |
17 |
18 |
19 |
20 |
21 |
22 | 專案網站:\n
23 | https://huskyapp.dev
24 |
25 |
26 |
27 |
28 |
29 |
30 | 問題回報:\n
31 | https://git.mentality.rip/FWGS/Husky/issues
32 |
33 |
34 |
35 |
36 |
37 | 登入 Pleroma 帳號
38 |
39 |
40 | 加入新的 Pleroma 帳號
41 |
42 |
43 |
44 |
45 | 請輸入你帳號所在的 Mastodon 站點的域名或地址
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/app/src/husky/res/values/donottranslate.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | https://huskyapp.dev
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/husky/res/values/husky_donottranslate.xml:
--------------------------------------------------------------------------------
1 |
2 | Plaintext
3 | Markdown
4 | BBCode
5 | HTML
6 |
7 |
8 | - @string/action_plaintext
9 | - @string/action_markdown
10 | - @string/action_bbcode
11 | - @string/action_html
12 |
13 |
14 |
15 |
16 | %1$s; %2$s; %3$s
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/adapter/HashtagViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.adapter
2 |
3 | import android.view.View
4 | import android.widget.TextView
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.keylesspalace.tusky.R
7 | import com.keylesspalace.tusky.interfaces.LinkListener
8 |
9 | class HashtagViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
10 | private val hashtag: TextView = itemView.findViewById(R.id.hashtag)
11 |
12 | fun setup(tag: String, listener: LinkListener) {
13 | hashtag.text = String.format("#%s", tag)
14 | hashtag.setOnClickListener { listener.onViewTag(tag) }
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/adapter/LoadingFooterViewHolder.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2018 Conny Duck
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.adapter
17 |
18 | import androidx.recyclerview.widget.RecyclerView
19 | import android.view.View
20 |
21 | class LoadingFooterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/adapter/SingleViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.adapter;
2 |
3 | import androidx.recyclerview.widget.RecyclerView;
4 | import android.view.View;
5 |
6 | // empty class to be able to instantiate ViewHolder which is abstract for dumbass reason
7 | public class SingleViewHolder extends RecyclerView.ViewHolder {
8 | public SingleViewHolder(View view) {
9 | super(view);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/appstore/EventsHub.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.appstore
2 |
3 | import io.reactivex.Observable
4 | import io.reactivex.subjects.PublishSubject
5 |
6 | interface Event
7 | interface Dispatchable : Event
8 |
9 | interface EventHub {
10 | val events: Observable
11 | fun dispatch(event: Dispatchable)
12 | }
13 |
14 | object EventHubImpl : EventHub {
15 |
16 | private val eventsSubject = PublishSubject.create()
17 | override val events: Observable = eventsSubject
18 |
19 | override fun dispatch(event: Dispatchable) {
20 | eventsSubject.onNext(event)
21 | }
22 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/components/chat/ChatViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.components.chat
2 |
3 | import com.keylesspalace.tusky.components.common.CommonComposeViewModel
4 | import com.keylesspalace.tusky.components.common.MediaUploader
5 | import com.keylesspalace.tusky.components.compose.ComposeActivity
6 | import com.keylesspalace.tusky.db.AccountManager
7 | import com.keylesspalace.tusky.db.AppDatabase
8 | import com.keylesspalace.tusky.network.MastodonApi
9 | import com.keylesspalace.tusky.service.ServiceClient
10 | import com.keylesspalace.tusky.util.*
11 | import javax.inject.Inject
12 |
13 | open class ChatViewModel
14 | @Inject constructor(
15 | private val api: MastodonApi,
16 | private val accountManager: AccountManager,
17 | private val mediaUploader: MediaUploader,
18 | private val serviceClient: ServiceClient,
19 | private val saveTootHelper: SaveTootHelper,
20 | private val db: AppDatabase
21 | ) : CommonComposeViewModel(api, accountManager, mediaUploader, db) {
22 |
23 | fun getSingleMedia() : ComposeActivity.QueuedMedia? {
24 | return if(media.value?.isNotEmpty() == true)
25 | media.value?.get(0)
26 | else null
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/components/instancemute/interfaces/InstanceActionListener.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.components.instancemute.interfaces
2 |
3 | interface InstanceActionListener {
4 | fun mute(mute: Boolean, instance: String, position: Int)
5 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/components/notifications/Notifier.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.components.notifications
2 |
3 | import android.content.Context
4 | import com.keylesspalace.tusky.db.AccountEntity
5 | import com.keylesspalace.tusky.entity.Notification
6 |
7 | /**
8 | * Shows notifications.
9 | */
10 | interface Notifier {
11 | fun show(notification: Notification, account: AccountEntity, isFirstInBatch: Boolean)
12 | }
13 |
14 | class SystemNotifier(
15 | private val context: Context
16 | ) : Notifier {
17 | override fun show(notification: Notification, account: AccountEntity, isFirstInBatch: Boolean) {
18 | NotificationHelper.make(context, notification, account, isFirstInBatch)
19 | }
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/components/report/Screen.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 Joel Pyska
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.components.report
17 |
18 | enum class Screen {
19 | Statuses,
20 | Note,
21 | Done,
22 | Back,
23 | Finish
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/components/report/adapter/AdapterHandler.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 Joel Pyska
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.components.report.adapter
17 |
18 | import android.view.View
19 | import com.keylesspalace.tusky.entity.Attachment
20 | import com.keylesspalace.tusky.entity.Status
21 | import com.keylesspalace.tusky.interfaces.LinkListener
22 | import java.util.ArrayList
23 |
24 | interface AdapterHandler: LinkListener {
25 | fun showMedia(v: View?, status: Status?, idx: Int)
26 | fun setStatusChecked(status: Status, isChecked: Boolean)
27 | fun isStatusChecked(id: String): Boolean
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/components/search/SearchType.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.components.search
2 |
3 | enum class SearchType(val apiParameter: String) {
4 | Status("statuses"),
5 | Account("accounts"),
6 | Hashtag("hashtags")
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/db/AccountDao.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2018 Conny Duck
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.db
17 |
18 | import androidx.room.*
19 |
20 | @Dao
21 | interface AccountDao {
22 | @Insert(onConflict = OnConflictStrategy.REPLACE)
23 | fun insertOrReplace(account: AccountEntity): Long
24 |
25 | @Delete
26 | fun delete(account: AccountEntity)
27 |
28 | @Query("SELECT * FROM AccountEntity ORDER BY id ASC")
29 | fun loadAll(): List
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/db/ChatEntity.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.db
2 |
3 | import androidx.room.*
4 |
5 | @Entity(
6 | primaryKeys = ["localId", "chatId"]
7 | )
8 | data class ChatEntity (
9 | val localId: Long, /* our user account id */
10 | val chatId: String,
11 | val accountId: String,
12 | val unread: Long,
13 | val updatedAt: Long,
14 | val lastMessageId: String?
15 | )
16 |
17 | data class ChatEntityWithAccount (
18 | @Embedded val chat: ChatEntity,
19 | @Embedded(prefix = "a_") val account: TimelineAccountEntity?,
20 | @Embedded(prefix = "msg_") val lastMessage: ChatMessageEntity? = null
21 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/db/ChatMessageEntity.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.db
2 |
3 | import androidx.room.Entity
4 |
5 | /*
6 | * ChatMessage model
7 | */
8 |
9 | @Entity(
10 | primaryKeys = ["localId", "messageId"]
11 | )
12 | data class ChatMessageEntity(
13 | val localId: Long,
14 | val messageId: String,
15 | val content: String?,
16 | val chatId: String,
17 | val accountId: String,
18 | val createdAt: Long,
19 | val attachment: String?,
20 | val emojis: String
21 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/db/InstanceDao.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2018 Conny Duck
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.db
17 |
18 | import androidx.room.Dao
19 | import androidx.room.Insert
20 | import androidx.room.OnConflictStrategy
21 | import androidx.room.Query
22 | import io.reactivex.Single
23 |
24 | @Dao
25 | interface InstanceDao {
26 | @Insert(onConflict = OnConflictStrategy.REPLACE)
27 | fun insertOrReplace(instance: InstanceEntity)
28 |
29 | @Query("SELECT * FROM InstanceEntity WHERE instance = :instance LIMIT 1")
30 | fun loadMetadataForInstance(instance: String): Single
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/db/InstanceEntity.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2018 Conny Duck
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.db
17 |
18 | import androidx.room.Entity
19 | import androidx.room.PrimaryKey
20 | import androidx.room.TypeConverters
21 | import com.keylesspalace.tusky.entity.Emoji
22 |
23 | @Entity
24 | @TypeConverters(Converters::class)
25 | data class InstanceEntity(
26 | @field:PrimaryKey var instance: String,
27 | val emojiList: List?,
28 | val maximumTootCharacters: Int?,
29 | val maxPollOptions: Int?,
30 | val maxPollOptionLength: Int?,
31 | val version: String?,
32 | val chatLimit: Int?
33 | )
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/di/GlideModule.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.di
2 |
3 | import com.keylesspalace.tusky.util.OmittedDomainAppModule
4 | import dagger.Module
5 | import dagger.android.ContributesAndroidInjector
6 |
7 | @Module
8 | abstract class GlideModule {
9 | @ContributesAndroidInjector
10 | abstract fun provideOmittedDomainAppModule() : OmittedDomainAppModule
11 |
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/di/Injectable.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2018 charlag
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 |
17 | package com.keylesspalace.tusky.di
18 |
19 | /**
20 | * Created by charlag on 3/24/18.
21 | */
22 |
23 | interface Injectable
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/di/MediaUploaderModule.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 Tusky Contributors
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.di
17 |
18 | import android.content.Context
19 | import com.keylesspalace.tusky.components.common.MediaUploader
20 | import com.keylesspalace.tusky.components.common.MediaUploaderImpl
21 | import com.keylesspalace.tusky.network.MastodonApi
22 | import dagger.Module
23 | import dagger.Provides
24 |
25 | @Module
26 | class MediaUploaderModule {
27 | @Provides
28 | fun providesMediaUploder(context: Context, mastodonApi: MastodonApi): MediaUploader =
29 | MediaUploaderImpl(context, mastodonApi)
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/di/RepositoryModule.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.di
2 |
3 | import com.google.gson.Gson
4 | import com.keylesspalace.tusky.db.AccountManager
5 | import com.keylesspalace.tusky.db.AppDatabase
6 | import com.keylesspalace.tusky.network.MastodonApi
7 | import com.keylesspalace.tusky.repository.ChatRepository
8 | import com.keylesspalace.tusky.repository.ChatRepositoryImpl
9 | import com.keylesspalace.tusky.repository.TimelineRepository
10 | import com.keylesspalace.tusky.repository.TimelineRepositoryImpl
11 | import dagger.Module
12 | import dagger.Provides
13 |
14 | @Module
15 | class RepositoryModule {
16 | @Provides
17 | fun providesTimelineRepository(
18 | db: AppDatabase,
19 | mastodonApi: MastodonApi,
20 | accountManager: AccountManager,
21 | gson: Gson
22 | ): TimelineRepository {
23 | return TimelineRepositoryImpl(db.timelineDao(), mastodonApi, accountManager, gson)
24 | }
25 |
26 | @Provides
27 | fun providesChatRepository(
28 | db: AppDatabase,
29 | mastodonApi: MastodonApi,
30 | accountManager: AccountManager,
31 | gson: Gson
32 | ): ChatRepository {
33 | return ChatRepositoryImpl(db.chatsDao(), mastodonApi, accountManager, gson)
34 | }
35 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/AccessToken.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | import com.google.gson.annotations.SerializedName
19 |
20 | data class AccessToken(
21 | @SerializedName("access_token") val accessToken: String
22 | )
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/AppCredentials.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | import com.google.gson.annotations.SerializedName
19 |
20 | data class AppCredentials(
21 | @SerializedName("client_id") val clientId: String,
22 | @SerializedName("client_secret") val clientSecret: String
23 | )
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/Conversation.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 Conny Duck
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | import com.google.gson.annotations.SerializedName
19 |
20 | data class Conversation(
21 | val id: String,
22 | val accounts: List,
23 | @SerializedName("last_status") val lastStatus: Status?, // should never be null, but apparently its possible https://github.com/tuskyapp/Tusky/issues/1038
24 | val unread: Boolean
25 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/HashTag.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.entity
2 |
3 | data class HashTag(val name: String)
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/IdentityProof.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.entity
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class IdentityProof(
6 | val provider: String,
7 | @SerializedName("provider_username") val username: String,
8 | @SerializedName("profile_url") val profileUrl: String
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/Marker.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.entity
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import java.util.*
5 |
6 | /**
7 | * API type for saving the scroll position of a timeline.
8 | */
9 | data class Marker(
10 | @SerializedName("last_read_id")
11 | val lastReadId: String,
12 | val version: Int,
13 | @SerializedName("updated_at")
14 | val updatedAt: Date
15 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/MastoList.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see .
15 | */
16 |
17 | package com.keylesspalace.tusky.entity
18 |
19 | /**
20 | * Created by charlag on 1/4/18.
21 | */
22 |
23 | data class MastoList(
24 | val id: String,
25 | val title: String
26 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/ScheduledStatus.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 kyori19
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | import com.google.gson.annotations.SerializedName
19 |
20 | data class ScheduledStatus(
21 | val id: String,
22 | @SerializedName("scheduled_at") val scheduledAt: String,
23 | val params: StatusParams,
24 | @SerializedName("media_attachments") val mediaAttachments: ArrayList
25 | )
26 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/SearchResult.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | data class SearchResult (
19 | val accounts: List,
20 | val statuses: List,
21 | val hashtags: List
22 | )
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/StatusContext.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | data class StatusContext (
19 | val ancestors: List,
20 | val descendants: List
21 | )
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/StatusParams.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 kyori19
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | import com.google.gson.annotations.SerializedName
19 |
20 | data class StatusParams(
21 | val text: String,
22 | val sensitive: Boolean,
23 | val visibility: Status.Visibility,
24 | @SerializedName("spoiler_text") val spoilerText: String,
25 | @SerializedName("in_reply_to_id") val inReplyToId: String?
26 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/Sticker.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2018 Conny Duck
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.entity
17 |
18 | import android.os.Parcelable
19 | import kotlinx.android.parcel.Parcelize
20 |
21 | data class StickerPack(
22 | val title: String,
23 | val tabIcon: String,
24 | val stickers: List,
25 | var internal_url: String = ""
26 | ) : Comparable {
27 | override fun compareTo(pack: StickerPack) : Int {
28 | return title.compareTo(pack.title)
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/entity/StreamEvent.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.entity
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class StreamEvent (
6 | val event: EventType,
7 | val payload: String
8 | ) {
9 | enum class EventType {
10 | UNKNOWN,
11 | @SerializedName("update")
12 | UPDATE,
13 | @SerializedName("notification")
14 | NOTIFICATION,
15 | @SerializedName("delete")
16 | DELETE,
17 | @SerializedName("filters_changed")
18 | FILTERS_CHANGED;
19 | }
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/AccountActionListener.java:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.interfaces;
17 |
18 | public interface AccountActionListener {
19 | void onViewAccount(String id);
20 | void onMute(final boolean mute, final String id, final int position, final boolean notifications);
21 | void onBlock(final boolean block, final String id, final int position);
22 | void onRespondToFollowRequest(final boolean accept, final String id, final int position);
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/AccountSelectionListener.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 Levi Bard
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.interfaces
17 |
18 | import com.keylesspalace.tusky.db.AccountEntity
19 |
20 | interface AccountSelectionListener {
21 | fun onAccountSelected(account: AccountEntity)
22 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/ActionButtonActivity.java:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.interfaces;
17 |
18 | import androidx.annotation.Nullable;
19 | import com.google.android.material.floatingactionbutton.FloatingActionButton;
20 |
21 | public interface ActionButtonActivity {
22 |
23 | /* return the ActionButton of the Activity to hide or show it on scroll */
24 | @Nullable
25 | FloatingActionButton getActionButton();
26 |
27 | default void onActionButtonHidden() {}
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/ChatActionListener.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.interfaces
2 |
3 | import android.view.View
4 | import com.keylesspalace.tusky.entity.Chat
5 |
6 | interface ChatActionListener: LinkListener {
7 | fun onLoadMore(position: Int) {}
8 | fun onMore(chatId: String, v: View) {}
9 | fun openChat(position: Int) {}
10 | fun onViewMedia(position: Int, view: View?) {}
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/LinkListener.java:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.interfaces;
17 |
18 | public interface LinkListener {
19 | void onViewTag(String tag);
20 | void onViewAccount(String id);
21 | void onViewUrl(String url);
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/PermissionRequester.java:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.interfaces;
2 |
3 | public interface PermissionRequester {
4 | void onRequestPermissionsResult(String[] permissions, int[] grantResults);
5 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/RefreshableFragment.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.interfaces
2 |
3 | /**
4 | * Created by pandasoft (joelpyska1@gmail.com) on 04/04/2019.
5 | */
6 | interface RefreshableFragment {
7 | /**
8 | * Call this method to refresh fragment content
9 | */
10 | fun refreshContent()
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/interfaces/ReselectableFragment.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.interfaces
2 |
3 | /**
4 | * Created by pandasoft (joelpyska1@gmail.com) on 04/04/2019.
5 | */
6 | interface ReselectableFragment {
7 | /**
8 | * Call this method when tab reselected
9 | */
10 | fun onReselect()
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/pager/AvatarImagePagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.pager
2 |
3 | import androidx.fragment.app.Fragment
4 | import androidx.fragment.app.FragmentActivity
5 | import com.keylesspalace.tusky.ViewMediaAdapter
6 | import com.keylesspalace.tusky.fragment.ViewMediaFragment
7 |
8 | class AvatarImagePagerAdapter(
9 | activity: FragmentActivity,
10 | private val avatarUrl: String
11 | ) : ViewMediaAdapter(activity) {
12 |
13 | override fun createFragment(position: Int): Fragment {
14 | return if (position == 0) {
15 | ViewMediaFragment.newAvatarInstance(avatarUrl)
16 | } else {
17 | throw IllegalStateException()
18 | }
19 | }
20 |
21 | override fun getItemCount() = 1
22 |
23 | override fun onTransitionEnd(position: Int) {
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/pager/MainPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2017 Andrew Dawson
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.pager
17 |
18 | import androidx.fragment.app.Fragment
19 | import androidx.fragment.app.FragmentActivity
20 | import com.keylesspalace.tusky.TabData
21 | import com.keylesspalace.tusky.util.CustomFragmentStateAdapter
22 |
23 | class MainPagerAdapter(val tabs: List, activity: FragmentActivity) : CustomFragmentStateAdapter(activity) {
24 |
25 | override fun createFragment(position: Int): Fragment {
26 | val tab = tabs[position]
27 | return tab.fragment(tab.arguments)
28 | }
29 |
30 | override fun getItemCount() = tabs.size
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/BindingViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import androidx.viewbinding.ViewBinding
5 |
6 | class BindingViewHolder(
7 | val binding: T
8 | ) : RecyclerView.ViewHolder(binding.root)
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/CardViewMode.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | enum class CardViewMode {
4 | NONE,
5 | FULL_WIDTH,
6 | INDENTED
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/ClickableSpanNoUnderline.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import android.text.TextPaint
4 | import android.text.style.ClickableSpan
5 |
6 | abstract class ClickableSpanNoUnderline : ClickableSpan() {
7 | override fun updateDrawState(ds: TextPaint) {
8 | super.updateDrawState(ds)
9 | ds.isUnderlineText = false
10 | }
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/CustomFragmentStateAdapter.kt:
--------------------------------------------------------------------------------
1 | /* Copyright 2019 Tusky Contributors
2 | *
3 | * This file is a part of Tusky.
4 | *
5 | * This program is free software; you can redistribute it and/or modify it under the terms of the
6 | * GNU General Public License as published by the Free Software Foundation; either version 3 of the
7 | * License, or (at your option) any later version.
8 | *
9 | * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10 | * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11 | * Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License along with Tusky; if not,
14 | * see . */
15 |
16 | package com.keylesspalace.tusky.util
17 |
18 | import androidx.fragment.app.Fragment
19 | import androidx.fragment.app.FragmentActivity
20 | import androidx.viewpager2.adapter.FragmentStateAdapter
21 |
22 | abstract class CustomFragmentStateAdapter(
23 | private val activity: FragmentActivity
24 | ): FragmentStateAdapter(activity) {
25 |
26 | fun getFragment(position: Int): Fragment?
27 | = activity.supportFragmentManager.findFragmentByTag("f" + getItemId(position))
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/CustomURLSpan.java:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util;
2 |
3 | import android.os.Parcel;
4 | import android.os.Parcelable;
5 | import android.text.TextPaint;
6 | import android.text.style.URLSpan;
7 | import android.view.View;
8 |
9 | public class CustomURLSpan extends URLSpan {
10 | public CustomURLSpan(String url) {
11 | super(url);
12 | }
13 |
14 | private CustomURLSpan(Parcel src) {
15 | super(src);
16 | }
17 |
18 | public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
19 |
20 | @Override
21 | public CustomURLSpan createFromParcel(Parcel source) {
22 | return new CustomURLSpan(source);
23 | }
24 |
25 | @Override
26 | public CustomURLSpan[] newArray(int size) {
27 | return new CustomURLSpan[size];
28 | }
29 |
30 | };
31 |
32 | @Override
33 | public void onClick(View view) {
34 | LinkHelper.openLink(getURL(), view.getContext());
35 | }
36 |
37 | @Override public void updateDrawState(TextPaint ds) {
38 | super.updateDrawState(ds);
39 | ds.setUnderlineText(false);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/NetworkState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2017 The Android Open Source Project
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.keylesspalace.tusky.util
18 |
19 | enum class Status {
20 | RUNNING,
21 | SUCCESS,
22 | FAILED
23 | }
24 |
25 | @Suppress("DataClassPrivateConstructor")
26 | data class NetworkState private constructor(
27 | val status: Status,
28 | val msg: String? = null) {
29 | companion object {
30 | val LOADED = NetworkState(Status.SUCCESS)
31 | val LOADING = NetworkState(Status.RUNNING)
32 | fun error(msg: String?) = NetworkState(Status.FAILED, msg)
33 | }
34 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/Resource.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | sealed class Resource(open val data: T?)
4 |
5 | class Loading (override val data: T? = null) : Resource(data)
6 |
7 | class Success (override val data: T? = null) : Resource(data)
8 |
9 | class Error (override val data: T? = null,
10 | val errorMessage: String? = null,
11 | var consumed: Boolean = false,
12 | val cause: Throwable? = null
13 | ): Resource(data)
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/RxAwareViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import androidx.annotation.CallSuper
4 | import androidx.lifecycle.ViewModel
5 | import io.reactivex.disposables.CompositeDisposable
6 | import io.reactivex.disposables.Disposable
7 |
8 | open class RxAwareViewModel : ViewModel() {
9 | val disposables = CompositeDisposable()
10 |
11 | fun Disposable.autoDispose() = disposables.add(this)
12 |
13 | @CallSuper
14 | override fun onCleared() {
15 | super.onCleared()
16 | disposables.clear()
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/SharedPreferencesExtensions.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import android.content.SharedPreferences
4 |
5 | fun SharedPreferences.getNonNullString(key: String, defValue: String): String {
6 | return this.getString(key, defValue) ?: defValue
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/StatusDisplayOptions.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | data class StatusDisplayOptions(
4 | @get:JvmName("animateAvatars")
5 | val animateAvatars: Boolean,
6 | @get:JvmName("mediaPreviewEnabled")
7 | val mediaPreviewEnabled: Boolean,
8 | @get:JvmName("useAbsoluteTime")
9 | val useAbsoluteTime: Boolean,
10 | @get:JvmName("showBotOverlay")
11 | val showBotOverlay: Boolean,
12 | @get:JvmName("useBlurhash")
13 | val useBlurhash: Boolean,
14 | @get:JvmName("cardViewMode")
15 | val cardViewMode: CardViewMode,
16 | @get:JvmName("confirmReblogs")
17 | val confirmReblogs: Boolean,
18 | @get:JvmName("renderStatusAsMention")
19 | val renderStatusAsMention: Boolean,
20 | @get:JvmName("hideStats")
21 | val hideStats: Boolean
22 | )
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/ViewPager2Fix.java:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util;
2 |
3 | import androidx.viewpager2.widget.ViewPager2;
4 | import androidx.recyclerview.widget.RecyclerView;
5 | import java.lang.reflect.*;
6 | import java.lang.*;
7 |
8 | /**
9 | * ViewPager2 written by monkeys!
10 | */
11 | public class ViewPager2Fix {
12 | /**
13 | * Thanks to @al.e.shevelev@medium.com for solution
14 | */
15 | public static Field getViewPagerRecyclerViewField() throws NoSuchFieldException {
16 | Field f = ViewPager2.class.getDeclaredField("mRecyclerView");
17 | f.setAccessible(true);
18 | return f;
19 | }
20 |
21 | public static Field getRecyclerViewTouchSlopField() throws NoSuchFieldException {
22 | Field f = RecyclerView.class.getDeclaredField("mTouchSlop");
23 | f.setAccessible(true);
24 | return f;
25 | }
26 |
27 | public static void reduceVelocity(ViewPager2 pager, float val) {
28 | try {
29 | Field recyclerViewField = getViewPagerRecyclerViewField();
30 | Field touchSlopField = getRecyclerViewTouchSlopField();
31 |
32 | RecyclerView recyclerView = (RecyclerView)recyclerViewField.get(pager);
33 | int touchSlop = (int)touchSlopField.get(recyclerView);
34 | touchSlopField.setInt(recyclerView, (int)(touchSlop*val));
35 | } catch(Exception e) {
36 | // all possible exceptions must be caught during tests
37 | ;
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/util/getErrorMessage.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 |
6 | private fun getErrorMessage(report: PagingRequestHelper.StatusReport): String {
7 | return PagingRequestHelper.RequestType.values().mapNotNull {
8 | report.getErrorFor(it)?.message
9 | }.first()
10 | }
11 |
12 | fun PagingRequestHelper.createStatusLiveData(): LiveData {
13 | val liveData = MutableLiveData()
14 | addListener { report ->
15 | when {
16 | report.hasRunning() -> liveData.postValue(NetworkState.LOADING)
17 | report.hasError() -> liveData.postValue(
18 | NetworkState.error(getErrorMessage(report)))
19 | else -> liveData.postValue(NetworkState.LOADED)
20 | }
21 | }
22 | return liveData
23 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/view/EmojiPicker.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.view
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import androidx.recyclerview.widget.GridLayoutManager
6 | import androidx.recyclerview.widget.RecyclerView
7 |
8 | class EmojiPicker @JvmOverloads constructor(
9 | context: Context,
10 | attrs: AttributeSet? = null
11 | ) : RecyclerView(context, attrs) {
12 |
13 | init {
14 | clipToPadding = false
15 | layoutManager = GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/view/ExposedPlayPauseVideoView.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.view
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import android.widget.VideoView
6 |
7 | class ExposedPlayPauseVideoView @JvmOverloads constructor(
8 | context: Context,
9 | attrs: AttributeSet? = null,
10 | defStyleAttr: Int = 0)
11 | : VideoView(context, attrs, defStyleAttr) {
12 |
13 | private var listener: PlayPauseListener? = null
14 |
15 | fun setPlayPauseListener(listener: PlayPauseListener) {
16 | this.listener = listener
17 | }
18 |
19 | override fun start() {
20 | super.start()
21 | listener?.onPlay()
22 | }
23 |
24 | override fun pause() {
25 | super.pause()
26 | listener?.onPause()
27 | }
28 |
29 | interface PlayPauseListener {
30 | fun onPlay()
31 | fun onPause()
32 | }
33 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/view/MuteAccountDialog.kt:
--------------------------------------------------------------------------------
1 | @file:JvmName("MuteAccountDialog")
2 |
3 | package com.keylesspalace.tusky.view
4 |
5 | import android.app.Activity
6 | import android.widget.CheckBox
7 | import android.widget.Spinner
8 | import android.widget.TextView
9 | import androidx.appcompat.app.AlertDialog
10 | import com.keylesspalace.tusky.R
11 |
12 | fun showMuteAccountDialog(
13 | activity: Activity,
14 | accountUsername: String,
15 | onOk: (notifications: Boolean, duration: Int) -> Unit
16 | ) {
17 | val view = activity.layoutInflater.inflate(R.layout.dialog_mute_account, null)
18 | (view.findViewById(R.id.warning) as TextView).text =
19 | activity.getString(R.string.dialog_mute_warning, accountUsername)
20 | val checkbox: CheckBox = view.findViewById(R.id.checkbox)
21 | checkbox.setChecked(true)
22 |
23 | AlertDialog.Builder(activity)
24 | .setView(view)
25 | .setPositiveButton(android.R.string.ok) { _, _ ->
26 | val spinner: Spinner = view.findViewById(R.id.duration)
27 | val durationValues = activity.resources.getIntArray(R.array.mute_duration_values)
28 | onOk(checkbox.isChecked, durationValues[spinner.selectedItemPosition])
29 | }
30 | .setNegativeButton(android.R.string.cancel, null)
31 | .show()
32 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/view/SquareImageView.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.view
2 |
3 | import android.content.Context
4 | import androidx.appcompat.widget.AppCompatImageView
5 | import android.util.AttributeSet
6 |
7 | /**
8 | * Created by charlag on 26/10/2017.
9 | */
10 |
11 | class SquareImageView : AppCompatImageView {
12 | constructor(context: Context) : super(context)
13 |
14 | constructor(context: Context, attributes: AttributeSet) : super(context, attributes)
15 |
16 | constructor(context: Context, attributes: AttributeSet, defStyleAttr: Int)
17 | : super(context, attributes, defStyleAttr)
18 |
19 | override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
20 | super.onMeasure(widthMeasureSpec, heightMeasureSpec)
21 | val width = measuredWidth
22 | setMeasuredDimension(width, width)
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/keylesspalace/tusky/viewdata/AttachmentViewData.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.viewdata
2 |
3 | import android.os.Parcelable
4 | import com.keylesspalace.tusky.entity.Attachment
5 | import com.keylesspalace.tusky.entity.Status
6 | import kotlinx.android.parcel.Parcelize
7 |
8 | @Parcelize
9 | data class AttachmentViewData(
10 | val attachment: Attachment,
11 | val statusId: String?,
12 | val statusUrl: String?
13 | ) : Parcelable {
14 | companion object {
15 | @JvmStatic
16 | fun list(status: Status): List {
17 | val actionable = status.actionableStatus
18 | return actionable.attachments.map {
19 | AttachmentViewData(it, actionable.id, actionable.url!!)
20 | }
21 | }
22 |
23 | fun list(attachments: List): List {
24 | return attachments.map {
25 | AttachmentViewData(it, it.id, it.url)
26 | }
27 | }
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/explode.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/fade_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/fade_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_from_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_from_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_to_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_to_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/color/account_tab_font_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/color/color_background_transparent_60.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/color/compound_button_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/color/emoji_reaction_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/color/text_input_layout_box_stroke_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/elephant_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-hdpi/elephant_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/elephant_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-hdpi/elephant_friend.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/elephant_friend_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-hdpi/elephant_friend_empty.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/elephant_offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-hdpi/elephant_offline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-hdpi/ic_notify.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-hdpi/splash.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/elephant_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-mdpi/elephant_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/elephant_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-mdpi/elephant_friend.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/elephant_friend_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-mdpi/elephant_friend_empty.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/elephant_offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-mdpi/elephant_offline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-mdpi/ic_notify.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-mdpi/splash.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v26/launcher_shadow_gradient.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/elephant_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xhdpi/elephant_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/elephant_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xhdpi/elephant_friend.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/elephant_friend_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xhdpi/elephant_friend_empty.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/elephant_offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xhdpi/elephant_offline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xhdpi/ic_notify.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xhdpi/splash.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/elephant_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxhdpi/elephant_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/elephant_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxhdpi/elephant_friend.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/elephant_friend_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxhdpi/elephant_friend_empty.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/elephant_offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxhdpi/elephant_offline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxhdpi/ic_notify.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxhdpi/splash.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/elephant_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxxhdpi/elephant_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/elephant_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxxhdpi/elephant_friend.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/elephant_friend_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxxhdpi/elephant_friend_empty.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/elephant_offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxxhdpi/elephant_offline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxxhdpi/ic_notify.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/app/src/main/res/drawable-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/avatar_border.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_dialog_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/card_frame.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/card_image_placeholder.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/conversation_thread_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/description_bg_expanded.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_access_time.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_a_photo_32dp.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_alert_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_attach_file_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bbcode_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
8 |
11 |
14 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bookmark_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bookmark_active_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bot_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_briefcase.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bullhorn_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cancel_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_32dp.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_box_outline_blank_18dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clear_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_create_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cw_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_drag_indicator_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_drag_indicator_horiz_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_email_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_emoji_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_emoji_34dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_exit_to_app_24px.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_eye_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_favourite_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_favourite_active_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_file_download_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_forum_24px.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_hashtag.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_hide_media_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_home_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_html_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
8 |
11 |
14 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_list.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_local_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_open_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_outline_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_logout.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_markdown.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_share_24dp.xml:
--------------------------------------------------------------------------------
1 |
16 |
22 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_more_horiz_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_music_box_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_music_box_preview_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_mute_24dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notebook.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notifications_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notifications_active_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
10 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notifications_off_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_add_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_photo_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play_indicator.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_plus_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_poll_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_preview_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_public_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_radio_button_unchecked_18dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reblog_18dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reblog_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reblog_active_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reblog_direct_24dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reblog_private_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reblog_private_active_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reject_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_repeat_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reply_18dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reply_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reply_all_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_send_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_star_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tabs.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tusky.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_videocam_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/materialdrawer_shape_large.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/materialdrawer_shape_small.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/md_bold.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/md_code.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/md_italic.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/md_link.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/md_strikethrough.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/media_preview_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/media_warning_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/message_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/poll_option_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/poll_option_shape.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/profile_badge_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/report_success_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/round_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/spellcheck.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/status_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/unread_shape.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout-sw640dp/fragment_view_thread.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_account_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_modal_timeline.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_report.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_statuslist.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_view_media.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
14 |
21 |
22 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_view_tag.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_view_thread.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_emoji_keyboard.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_emojicompat.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
12 |
15 |
16 |
19 |
20 |
23 |
24 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_account_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_instance_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
17 |
18 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_view_thread.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_add_poll_option.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
18 |
19 |
20 |
21 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_autocomplete_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_autocomplete_emoji.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
20 |
21 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_autocomplete_hashtag.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_emoji_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_emoji_keyboard_emoji.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_emoji_keyboard_page.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_emoji_keyboard_sticker.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_emoji_picker.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_emoji_reaction.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_footer.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_hashtag.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
22 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_network_state.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
12 |
17 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_picker_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_poll_preview_option.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_saved_toot.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
15 |
16 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_status_bottom_sheet.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_status_placeholder.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_tab_preference_small.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/notifications_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
10 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/search_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/toolbar_basic.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/chat_more.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/drafts.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/edit_profile_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/emoji_reaction_more.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/list_actions.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/search_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/view_media_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/view_thread_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rAU/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-large/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 400dp
3 |
4 | 160dp
5 | 180dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/theme_colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @color/tusky_grey_30
5 | @color/tusky_grey_25
6 |
7 | @color/tusky_grey_20
8 | @color/tusky_grey_10
9 |
10 | @color/white
11 | @color/tusky_grey_90
12 | @color/tusky_grey_70
13 | @color/tusky_grey_40
14 |
15 | @color/tusky_grey_70
16 |
17 | @color/tusky_grey_30
18 | @color/tusky_grey_25
19 |
20 | @color/tusky_orange
21 |
22 | @color/header_background_filter_dark
23 |
24 | false
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-small/integer.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 2
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw380dp/toot_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 | @dimen/wrap_content
5 | 8dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values-te/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v27/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
18 |
19 |
20 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w640dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 640dp
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/actions.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/integers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 3
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values/string-arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | - @string/app_them_dark
6 | - @string/app_theme_light
7 | - @string/app_theme_black
8 | - @string/app_theme_auto
9 | - @string/app_theme_system
10 |
11 |
12 |
13 | - @string/post_privacy_public
14 | - @string/post_privacy_unlisted
15 | - @string/post_privacy_followers_only
16 |
17 |
18 |
19 | - @string/status_text_size_smallest
20 | - @string/status_text_size_small
21 | - @string/status_text_size_medium
22 | - @string/status_text_size_large
23 | - @string/status_text_size_largest
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/values/theme_colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @color/tusky_grey_95
5 | @color/tusky_grey_70
6 |
7 | @color/white
8 | @color/tusky_grey_80
9 |
10 | @color/tusky_grey_10
11 | @color/tusky_grey_20
12 | @color/tusky_grey_30
13 | @color/tusky_grey_70
14 |
15 | @color/tusky_grey_50
16 |
17 | @color/tusky_grey_70
18 | @color/tusky_grey_80
19 |
20 | @color/tusky_orange_light
21 |
22 | @color/header_background_filter_light
23 |
24 | true
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/values/toot_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | 48dp
5 | 12dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/searchable.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/share_shortcuts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/test/java/com/keylesspalace/tusky/util/EmojiCompatFontTest.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import org.junit.Assert.*
4 | import org.junit.Test
5 |
6 | class EmojiCompatFontTest {
7 |
8 | @Test
9 | fun testCompareVersions() {
10 |
11 | assertEquals(
12 | -1,
13 | EmojiCompatFont.compareVersions(
14 | listOf(0),
15 | listOf(1, 2, 3)
16 | )
17 | )
18 | assertEquals(
19 | 1,
20 | EmojiCompatFont.compareVersions(
21 | listOf(1, 2, 3),
22 | listOf(0, 0, 0)
23 | )
24 | )
25 | assertEquals(
26 | -1,
27 | EmojiCompatFont.compareVersions(
28 | listOf(1, 0, 1),
29 | listOf(1, 1, 0)
30 | )
31 | )
32 | assertEquals(
33 | 0,
34 | EmojiCompatFont.compareVersions(
35 | listOf(4, 5, 6),
36 | listOf(4, 5, 6)
37 | )
38 | )
39 | assertEquals(
40 | 0,
41 | EmojiCompatFont.compareVersions(
42 | listOf(0, 0),
43 | listOf(0)
44 | )
45 | )
46 | }
47 | }
--------------------------------------------------------------------------------
/app/src/test/java/com/keylesspalace/tusky/util/VersionUtilsTest.kt:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util
2 |
3 | import org.junit.Assert.assertEquals
4 | import org.junit.Test
5 | import org.junit.runner.RunWith
6 | import org.junit.runners.Parameterized
7 |
8 | @RunWith(Parameterized::class)
9 | class VersionUtilsTest(
10 | private val versionString: String,
11 | private val supportsScheduledToots: Boolean
12 | ) {
13 |
14 | companion object {
15 | @JvmStatic
16 | @Parameterized.Parameters
17 | fun data() = listOf(
18 | arrayOf("2.0.0", false),
19 | arrayOf("2a9a0", false),
20 | arrayOf("1.0", false),
21 | arrayOf("error", false),
22 | arrayOf("", false),
23 | arrayOf("2.6.9", false),
24 | arrayOf("2.7.0", true),
25 | arrayOf("2.00008.0", true),
26 | arrayOf("2.7.2 (compatible; Pleroma 1.0.0-1168-ge18c7866-pleroma-dot-site)", true),
27 | arrayOf("3.0.1", true)
28 | )
29 | }
30 |
31 | @Test
32 | fun testVersionUtils() {
33 | assertEquals(VersionUtils(versionString).supportsScheduledToots(), supportsScheduledToots)
34 | }
35 |
36 | }
--------------------------------------------------------------------------------
/app/src/test/java/com/keylesspalace/tusky/util/ViewPager2FixTest.java:
--------------------------------------------------------------------------------
1 | package com.keylesspalace.tusky.util;
2 |
3 | import org.junit.Before;
4 | import org.junit.Test;
5 | import org.junit.Assert;
6 | import org.junit.runner.RunWith;
7 | import androidx.test.ext.junit.runners.AndroidJUnit4;
8 | import androidx.viewpager2.widget.ViewPager2;
9 | import androidx.recyclerview.widget.RecyclerView;
10 | import org.junit.runners.Parameterized;
11 | import java.lang.reflect.*;
12 | import java.lang.*;
13 | import com.keylesspalace.tusky.util.ViewPager2Fix;
14 |
15 | public class ViewPager2FixTest {
16 | @Test
17 | public void getViewPagerRecyclerViewFieldTest() {
18 | try {
19 | Field f = ViewPager2Fix.getViewPagerRecyclerViewField();
20 | } catch(Exception e) {
21 | Assert.fail("asdf");
22 | }
23 | }
24 |
25 | @Test
26 | public void getRecyclerViewTouchSlopFieldTest() {
27 | try {
28 | Field f = ViewPager2Fix.getRecyclerViewTouchSlopField();
29 | } catch(Exception e) {
30 | Assert.fail("asdf");
31 | }
32 | }
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/assets/fdroid_badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/assets/fdroid_badge.png
--------------------------------------------------------------------------------
/assets/splash.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/assets/splash.xcf
--------------------------------------------------------------------------------
/assets/tusky_logo_borderless.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/assets/tusky_logo_borderless.png
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.4.21'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:4.1.1'
9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | google()
16 | jcenter()
17 | mavenCentral()
18 | maven {
19 | url "https://jitpack.io"
20 | }
21 | }
22 | }
23 |
24 | task clean(type: Delete) {
25 | delete rootProject.buildDir
26 | }
27 |
--------------------------------------------------------------------------------
/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/debug.keystore
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/167.txt:
--------------------------------------------------------------------------------
1 | Husky v1.0
2 |
3 | First stable release.
4 | This release adds several Pleroma extensions support:
5 | * Emoji reactions
6 | * Formatting posts with Markdown, BBCode or HTML
7 | * Muted conversations
8 | * Stickers
9 | * Extended account properties to see who is your instance moderator or administrator
10 | * Unlimited attachments
11 |
12 | Several UI changes include: "Reply to" feature that jumps to replied post, bigger custom emojis by default and, of course, awesome Pleroma-tan artwork made by Lightning_Nord.
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/168.txt:
--------------------------------------------------------------------------------
1 | Husky v1.0.1
2 |
3 | This is a hotfix for v1.0 release.
4 | Changelog:
5 | * Fixed any image being resized and converted to JPG.
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Husky is a lightweight and fast client for Pleroma, Mastodon and other social networks that implement Mastodon API.
2 | It has support for Pleroma-specific extensions like emoji reactions, unlimited attachments, stickers and so on.
3 |
4 | Husky is a Free and Open Source software licensed under GNU General Public License v3. It's based on Tusky source code.
5 |
6 | Source code: https://git.mentality.rip/FWGS/Husky
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/00_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/phoneScreenshots/00_login.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/01_timeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/phoneScreenshots/01_timeline.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/02_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/phoneScreenshots/02_compose.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/03_profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/phoneScreenshots/03_profile.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/04_emojis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/fastlane/metadata/android/en-US/images/phoneScreenshots/04_emojis.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Husky is a client for Pleroma and Mastodon social networks
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Husky
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/changelogs/167.txt:
--------------------------------------------------------------------------------
1 | Husky v1.0
2 |
3 | Первый стабильный выпуск.
4 | Данный выпуск добавляет поддержку некоторых расширений Pleroma:
5 | * Эмодзи реакции
6 | * Форматирование статусов
7 | * Глушение бесед
8 | * Стикеры
9 | * Расширенные свойства профиля для администраторов и модераторов
10 | * Неограниченные вложения
11 |
12 | Некоторые изменения UI включают в себя: опцию "Ответ на" для перехода на отвеченный статус, увеличенные кастомные эмодзи и, конечно, великолепные арты Плеромы-тян от Lightning_Nord
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/changelogs/168.txt:
--------------------------------------------------------------------------------
1 | Husky v1.0.1
2 |
3 | Это хотфикс для выпуска v1.0.
4 | Изменения:
5 | * Исправлен баг когда любое изображение было изменено в размере и переконвертировано в JPG
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/full_description.txt:
--------------------------------------------------------------------------------
1 | Husky это легковесный и быстрый клиент для Pleroma, Mastodon и других социальных сетей поддерживающих Mastodon API.
2 | Клиент поддерживает специфичные для Pleroma расширения, такие как эмодзи реакции, неограниченные вложения, стикеры и так далее.
3 |
4 | Husky это свободное программное обеспечение распространяющееся под лицензией GNU General Public License v3. Базируется на исходном коде Tusky.
5 |
6 | Исходный код: https://git.mentality.rip/FWGS/Husky
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Husky это клиент для социальных сетей Pleroma и Mastodon
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/title.txt:
--------------------------------------------------------------------------------
1 | Husky
2 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 |
13 | org.gradle.jvmargs=-Xmx4096m
14 |
15 | # use parallel execution
16 | org.gradle.parallel=true
17 |
18 | android.enableR8.fullMode=true
19 | android.useAndroidX=true
20 | kapt.incremental.apt=false
21 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FWGS/Husky/49febda5228f3a178ffbeeda9ae38b5a1719705a/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-6.6.1-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/instance-build.gradle:
--------------------------------------------------------------------------------
1 | /**
2 | Edit this file to create a Tusky build that is customized for your Fediverse instance.
3 | Note: Publishing a custom build on Google Play may violate the Google Play developer policy (Repetetive Content)
4 | */
5 |
6 | // The app name
7 | ext.APP_NAME = "Husky"
8 |
9 | // The application id. Must be unique, e.g. based on your domain
10 | ext.APP_ID = "su.xash.husky"
11 |
12 | // url of a custom app logo. Recommended size at least 600x600. Keep empty to use the Tusky elephant friend.
13 | ext.CUSTOM_LOGO_URL = ""
14 |
15 | // e.g. mastodon.social. Keep empty to not suggest any instance on the signup screen
16 | ext.CUSTOM_INSTANCE = ""
17 |
18 | // link to your support account. Will be linked on the about page when not empty.
19 | ext.SUPPORT_ACCOUNT_URL = "https://huskyapp.dev/users/husky"
20 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------