├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── java
│ │ │ └── me
│ │ │ │ └── saket
│ │ │ │ └── dank
│ │ │ │ ├── reddit
│ │ │ │ ├── Subreddit.kt
│ │ │ │ ├── package-info.java
│ │ │ │ ├── jraw
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── JrawUsers.kt
│ │ │ │ └── RedditModule.kt
│ │ │ │ ├── ui
│ │ │ │ ├── UiEvent.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── giphy
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── GiphyGif.java
│ │ │ │ ├── media
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── VideoNotCachedYetException.java
│ │ │ │ │ ├── ImgurResponse.java
│ │ │ │ │ ├── MediaAlbumItem.java
│ │ │ │ │ ├── MediaFragmentCallbacks.java
│ │ │ │ │ ├── gfycat
│ │ │ │ │ │ └── GfycatOauthResponse.java
│ │ │ │ │ ├── StreamableRepository.kt
│ │ │ │ │ └── IncorrectMediaUrlParsingData.java
│ │ │ │ ├── user
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── messages
│ │ │ │ │ │ ├── MessagesRefreshState.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── MessageClickEvent.java
│ │ │ │ │ ├── UserSession.java
│ │ │ │ │ └── UserProfile.kt
│ │ │ │ ├── compose
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── OnLinkInsertListener.java
│ │ │ │ │ ├── MarkdownAction.java
│ │ │ │ │ └── SimpleIdentifiable.kt
│ │ │ │ ├── submission
│ │ │ │ │ ├── PrivateSubredditException.java
│ │ │ │ │ ├── SubredditNotFoundException.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── events
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ ├── SubmissionMediaLoadFailed.java
│ │ │ │ │ │ ├── SubmissionImageLoadStarted.java
│ │ │ │ │ │ ├── SubmissionVideoLoadStarted.java
│ │ │ │ │ │ ├── SubmissionCommentsLoadFailed.java
│ │ │ │ │ │ ├── SubmissionImageLoadSucceeded.java
│ │ │ │ │ │ ├── SubmissionNsfwContentFiltered.java
│ │ │ │ │ │ ├── SubmissionVideoLoadSucceeded.java
│ │ │ │ │ │ ├── SubmissionContentResolvingFailed.java
│ │ │ │ │ │ ├── SubmissionContentResolvingStarted.java
│ │ │ │ │ │ ├── SubmissionViewFullCommentsClicked.java
│ │ │ │ │ │ ├── SubmissionCommentsRefreshClicked.java
│ │ │ │ │ │ ├── ReplyDiscardClickEvent.java
│ │ │ │ │ │ ├── MarkMessageAsReadRequested.java
│ │ │ │ │ │ ├── ReplyInsertGifClickEvent.java
│ │ │ │ │ │ ├── SubmissionChangeCommentSortClicked.java
│ │ │ │ │ │ ├── SubmissionRequestChanged.java
│ │ │ │ │ │ ├── SubmissionCommentSortChanged.java
│ │ │ │ │ │ ├── InlineReplyRequestEvent.java
│ │ │ │ │ │ ├── ReplyRetrySendClickEvent.java
│ │ │ │ │ │ ├── SubmissionChanged.java
│ │ │ │ │ │ ├── ReplyItemViewBindEvent.java
│ │ │ │ │ │ ├── ReplySendClickEvent.java
│ │ │ │ │ │ ├── CommentClicked.java
│ │ │ │ │ │ └── ContributionVoteSwipeEvent.java
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── SubmissionCommentRowType.java
│ │ │ │ │ ├── SubmissionVideoClickEvent.java
│ │ │ │ │ ├── SubmissionUi.java
│ │ │ │ │ ├── FocusedComment.java
│ │ │ │ │ ├── DraftStore.java
│ │ │ │ │ └── SubmissionAndComments.kt
│ │ │ │ ├── webview
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── subreddit
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── events
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ ├── SubredditScreenCreateEvent.java
│ │ │ │ │ │ └── SubredditSubmissionClickEvent.java
│ │ │ │ │ ├── uimodels
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── SubredditChangeEvent.java
│ │ │ │ │ ├── SubredditUi.java
│ │ │ │ │ └── SubredditUserProfileIconType.java
│ │ │ │ ├── appshortcuts
│ │ │ │ │ ├── AppShortcutScreenUiModel.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── AppShortcutPlaceholderUiModel.java
│ │ │ │ ├── preferences
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── UserPreferencesScreenUiModel.java
│ │ │ │ │ ├── events
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ ├── UserPreferenceClickListener.java
│ │ │ │ │ │ ├── UserPreferenceSwitchToggleEvent.java
│ │ │ │ │ │ └── UserPreferenceButtonClickEvent.java
│ │ │ │ │ ├── gestures
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── GesturePreferenceUiModel.java
│ │ │ │ │ ├── UserPreferenceNestedScreen.java
│ │ │ │ │ └── PreferenceButtonClickHandler.java
│ │ │ │ ├── UiChange.java
│ │ │ │ ├── authentication
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── subscriptions
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── SubredditFlexboxLayoutManager.java
│ │ │ │ ├── DankDialogFragment.java
│ │ │ │ ├── splash
│ │ │ │ │ └── SplashActivity.java
│ │ │ │ └── ScreenSavedState.java
│ │ │ │ ├── data
│ │ │ │ ├── SwipeEvent.java
│ │ │ │ ├── OnLoginRequireListener.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── CachePreFillThing.java
│ │ │ │ ├── exceptions
│ │ │ │ │ ├── InvalidImgurAlbumException.java
│ │ │ │ │ ├── ImgurApiRequestRateLimitReachedException.java
│ │ │ │ │ └── ImgurApiUploadRateLimitReachedException.java
│ │ │ │ ├── StubPublicContribution.java
│ │ │ │ ├── AppInfo.java
│ │ │ │ ├── EmptyState.java
│ │ │ │ ├── FileSize.java
│ │ │ │ ├── ErrorState.java
│ │ │ │ ├── FullNameType.java
│ │ │ │ ├── ActivityResult.java
│ │ │ │ └── UserPreferences.java
│ │ │ │ ├── utils
│ │ │ │ ├── SafeFunction.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── glide
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── DankAppGlideModule.java
│ │ │ │ ├── okhttp
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── OkHttpRequestWriteProgressListener.java
│ │ │ │ │ └── OkHttpResponseReadProgressListener.java
│ │ │ │ ├── lifecycle
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── LifecycleOwner.java
│ │ │ │ │ ├── DialogLifecycleEvent.java
│ │ │ │ │ ├── ActivityLifecycleEvent.java
│ │ │ │ │ ├── FragmentLifecycleEvent.java
│ │ │ │ │ └── ViewLifecycleEvent.java
│ │ │ │ ├── markdown
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── markwon
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ ├── MarkdownTextView.java
│ │ │ │ │ │ └── SpoilerLabelSpan.java
│ │ │ │ ├── itemanimators
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── SlideLeftAlphaAnimator.java
│ │ │ │ │ ├── SubmissionCommentsItemAnimator.java
│ │ │ │ │ └── SlideUpAlphaAnimator.java
│ │ │ │ ├── Function0.java
│ │ │ │ ├── InfinitelyScrollableRecyclerViewAdapter.java
│ │ │ │ ├── Units.java
│ │ │ │ ├── AutoValueMoshiAdapterFactory.java
│ │ │ │ ├── DeviceInfo.java
│ │ │ │ ├── BackPressCallback.java
│ │ │ │ ├── SimpleTextWatcher.java
│ │ │ │ ├── SimpleRecyclerViewOnChildAttachStateChangeListener.java
│ │ │ │ ├── LinearSmoothScrollerWithVerticalSnapPref.java
│ │ │ │ ├── PersistableBundleUtils.java
│ │ │ │ ├── Themes.java
│ │ │ │ ├── Cursors.java
│ │ │ │ ├── RxPreferencesEnumTypeAdapter.java
│ │ │ │ └── Dates.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── di
│ │ │ │ └── package-info.java
│ │ │ │ ├── cache
│ │ │ │ ├── package-info.java
│ │ │ │ └── MoshiStoreJsonParser.java
│ │ │ │ ├── reply
│ │ │ │ ├── package-info.java
│ │ │ │ ├── DraftSaveResult.java
│ │ │ │ └── ReplyDraft.java
│ │ │ │ ├── vote
│ │ │ │ ├── package-info.java
│ │ │ │ ├── VoteDirectionX.kt
│ │ │ │ └── SimpleVotable.kt
│ │ │ │ ├── notifs
│ │ │ │ ├── package-info.java
│ │ │ │ └── NotificationConstants.java
│ │ │ │ ├── widgets
│ │ │ │ ├── package-info.java
│ │ │ │ ├── swipe
│ │ │ │ │ ├── SwipeDirection.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── ViewHolderWithSwipeActions.java
│ │ │ │ │ ├── SwipeActionIconView.java
│ │ │ │ │ ├── SwipeActions.java
│ │ │ │ │ └── SwipeAction.java
│ │ │ │ ├── prefs
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── span
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── InboxUI
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── SimpleExpandablePageStateChangeCallbacks.java
│ │ │ │ ├── binoculars
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── SeekBarWithFullHeightProgress.java
│ │ │ │ ├── ImageButtonWithDisabledTint.java
│ │ │ │ └── EditTextWithPrefix.java
│ │ │ │ ├── analytics
│ │ │ │ ├── package-info.java
│ │ │ │ ├── AnalyticsDaggerModule.java
│ │ │ │ └── CrashReporter.java
│ │ │ │ ├── walkthrough
│ │ │ │ ├── package-info.java
│ │ │ │ └── TextSwitcherWithDistinctCheck.java
│ │ │ │ ├── deeplinks
│ │ │ │ └── AppDeepLinkModule.java
│ │ │ │ └── urlparser
│ │ │ │ ├── RedditLink.java
│ │ │ │ ├── UnresolvedMediaLink.java
│ │ │ │ ├── RedditHostedVideoDashPlaylist.java
│ │ │ │ ├── ExternalLink.java
│ │ │ │ ├── RedditUserLink.java
│ │ │ │ ├── MediaLink.java
│ │ │ │ ├── RedditSubredditLink.java
│ │ │ │ └── RedditCommentLink.java
│ │ ├── assets
│ │ │ ├── bifocals.otf
│ │ │ ├── roboto_regular.ttf
│ │ │ ├── Inter-UI-Medium.otf
│ │ │ ├── Inter-UI-Regular.otf
│ │ │ ├── readertrial-medium.otf
│ │ │ ├── readertrial-regular.otf
│ │ │ ├── relativetrial-book.otf
│ │ │ ├── relativetrial-faux.otf
│ │ │ ├── relativetrial-medium.otf
│ │ │ ├── visuelttrial-regular.otf
│ │ │ ├── LaFabriqueTrial-Regular.otf
│ │ │ ├── LaFabriqueTrial-SemiBold.otf
│ │ │ ├── RobotoCondensed-Regular.ttf
│ │ │ ├── TranscriptTrial-Regular.otf
│ │ │ ├── relativetrial-mono12pitch.otf
│ │ │ ├── basis-grotesque-trial-medium.otf
│ │ │ └── basis-grotesque-trial-regular.otf
│ │ └── res
│ │ │ ├── font
│ │ │ ├── bifocals.otf
│ │ │ ├── roboto_bold.ttf
│ │ │ ├── roboto_light.ttf
│ │ │ ├── roboto_thin.ttf
│ │ │ ├── roboto_italic.ttf
│ │ │ ├── roboto_medium.ttf
│ │ │ ├── roboto_regular.ttf
│ │ │ ├── ibmplexsans_text.ttf
│ │ │ ├── ibmplexsans_medium.ttf
│ │ │ ├── ibmplexsans_regular.ttf
│ │ │ ├── roboto_bold_italic.ttf
│ │ │ ├── roboto_light_italic.ttf
│ │ │ ├── roboto_thin_italic.ttf
│ │ │ ├── ibmplexsans_semibold.ttf
│ │ │ ├── roboto_medium_italic.ttf
│ │ │ ├── ibmplexsans_condensed_medium.ttf
│ │ │ ├── ibmplexsans_condensed_regular.ttf
│ │ │ └── ibmplexsans_condensed_semibold.ttf
│ │ │ ├── drawable
│ │ │ ├── dank_cat.jpg
│ │ │ ├── ic_launcher_180.png
│ │ │ ├── background_subreddit_submission_nsfw.xml
│ │ │ ├── background_appshortcut_preview_launcher_icon.xml
│ │ │ ├── background_submission_link_favicon_circle.xml
│ │ │ ├── background_submission_self_thumbnail.xml
│ │ │ ├── shape_user_profile_popup_image_placeholder.xml
│ │ │ ├── ic_shortcut_subreddit_background.xml
│ │ │ ├── background_submission_image_scroll_hint.xml
│ │ │ ├── background_submission_header_archived_label.xml
│ │ │ ├── background_popup_window.xml
│ │ │ ├── background_submission_comment_reply.xml
│ │ │ ├── background_submission_self_text.xml
│ │ │ ├── background_mediaalbumviewer_error_state.xml
│ │ │ ├── background_message_content.xml
│ │ │ ├── background_submission_comment_options.xml
│ │ │ ├── background_submission_link.xml
│ │ │ ├── background_media_progress_bar_file_size.xml
│ │ │ ├── background_submission_toolbar_shadows.xml
│ │ │ ├── background_submission_view_full_thread.xml
│ │ │ ├── background_mediaalbumviewer_options_gradient.xml
│ │ │ ├── background_splash.xml
│ │ │ ├── ic_arrow_back_20dp.xml
│ │ │ ├── ic_done_24dp.xml
│ │ │ ├── ic_send_20dp.xml
│ │ │ ├── ic_drag_handle_24dp.xml
│ │ │ ├── ic_arrow_downward_18dp.xml
│ │ │ ├── ic_delete_20dp.xml
│ │ │ ├── ic_format_italic_24dp.xml
│ │ │ ├── ic_format_quote_24dp.xml
│ │ │ ├── ic_sort_16dp.xml
│ │ │ ├── ic_sort_20dp.xml
│ │ │ ├── ic_archive_32dp.xml
│ │ │ ├── ic_reply_24dp.xml
│ │ │ ├── ic_arrow_upward_12dp.xml
│ │ │ ├── ic_arrow_upward_24dp.xml
│ │ │ ├── ic_close_20dp.xml
│ │ │ ├── ic_reply_white_24dp.xml
│ │ │ ├── ic_arrow_downward_24dp.xml
│ │ │ ├── ic_text_fields_20dp.xml
│ │ │ ├── ic_text_fields_24dp.xml
│ │ │ ├── ic_arrow_forward_12dp.xml
│ │ │ ├── ic_save_20dp.xml
│ │ │ ├── ic_toolbar_close_24dp.xml
│ │ │ ├── background_dialog.xml
│ │ │ ├── ic_save_24dp.xml
│ │ │ ├── ic_code_24dp.xml
│ │ │ ├── ic_mail_24dp.xml
│ │ │ ├── ic_fullscreen_24dp.xml
│ │ │ ├── ic_subreddits_20dp.xml
│ │ │ ├── ic_subreddits_24dp.xml
│ │ │ ├── ic_configure_app_shortcuts_foreground.xml
│ │ │ ├── ic_error_24dp.xml
│ │ │ ├── submission_seekbar_video_progress.xml
│ │ │ ├── ic_person_12dp.xml
│ │ │ ├── ic_smartphone_20dp.xml
│ │ │ ├── ic_add_circle_24dp.xml
│ │ │ ├── ic_mail_unread_24dp.xml
│ │ │ ├── ic_textsms_24dp.xml
│ │ │ ├── ic_image_24dp.xml
│ │ │ ├── ic_edit_24dp.xml
│ │ │ ├── ic_gif_32dp.xml
│ │ │ ├── ic_redo_24dp.xml
│ │ │ ├── ic_submission_24dp.xml
│ │ │ ├── ic_undo_24dp.xml
│ │ │ ├── ic_more_vert_24dp.xml
│ │ │ ├── ic_open_in_new_tab_24dp.xml
│ │ │ ├── ic_copy_20dp.xml
│ │ │ ├── ic_network_cell_20dp.xml
│ │ │ ├── touchindicator_submission_thumbnail.xml
│ │ │ ├── ic_mode_comment_16dp.xml
│ │ │ ├── ic_done_all_24dp.xml
│ │ │ ├── ic_more_horiz_24dp.xml
│ │ │ ├── ic_cloud_download_24dp.xml
│ │ │ ├── ic_shortcut_subreddit.xml
│ │ │ ├── ic_time_20dp.xml
│ │ │ ├── ic_configure_app_shortcuts.xml
│ │ │ ├── ic_photo_library_24dp.xml
│ │ │ ├── ic_unsave_20dp.xml
│ │ │ ├── ic_unsave_24dp.xml
│ │ │ ├── ic_link_20dp.xml
│ │ │ ├── ic_link_24dp.xml
│ │ │ ├── ic_logout_24dp.xml
│ │ │ ├── ic_refresh_18dp.xml
│ │ │ ├── ic_user_profile_20dp.xml
│ │ │ ├── ic_user_profile_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── ic_lock_32dp.xml
│ │ │ ├── ic_volume_up_24dp.xml
│ │ │ ├── ic_refresh_24dp.xml
│ │ │ ├── ic_block_20dp.xml
│ │ │ ├── ic_block_24dp.xml
│ │ │ ├── ic_format_header_pound.xml
│ │ │ ├── ic_format_bold_24dp.xml
│ │ │ ├── ic_shortcut_subreddit_foreground.xml
│ │ │ ├── ic_person_outline_16dp.xml
│ │ │ ├── ic_adb_24dp.xml
│ │ │ ├── ic_network_wifi_20dp.xml
│ │ │ ├── ic_volume_off_24dp.xml
│ │ │ ├── ic_share_24dp.xml
│ │ │ ├── ic_share_20dp.xml
│ │ │ ├── background_addlink_paste_from_clipboard_offer.xml
│ │ │ ├── ic_look_and_feel_24dp.xml
│ │ │ ├── ic_sync_disabled_20dp.xml
│ │ │ ├── ic_format_superscript.xml
│ │ │ ├── ic_visibility_off_20dp.xml
│ │ │ ├── ic_visibility_off_24dp.xml
│ │ │ └── ic_google_chrome_20dp.xml
│ │ │ ├── values
│ │ │ ├── ids.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings_progress_with_file_size.xml
│ │ │ └── attrs_fab_transform.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
│ │ │ ├── drawable-hdpi
│ │ │ ├── emoji_waving_hand.png
│ │ │ ├── ic_status_bar_20dp.png
│ │ │ └── ic_status_bar_24dp.png
│ │ │ ├── drawable-mdpi
│ │ │ ├── emoji_waving_hand.png
│ │ │ ├── ic_status_bar_20dp.png
│ │ │ └── ic_status_bar_24dp.png
│ │ │ ├── drawable-xhdpi
│ │ │ ├── emoji_waving_hand.png
│ │ │ ├── ic_status_bar_20dp.png
│ │ │ └── ic_status_bar_24dp.png
│ │ │ ├── drawable-xxhdpi
│ │ │ ├── emoji_waving_hand.png
│ │ │ ├── ic_status_bar_20dp.png
│ │ │ └── ic_status_bar_24dp.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ ├── emoji_waving_hand.png
│ │ │ ├── ic_status_bar_20dp.png
│ │ │ ├── ic_status_bar_24dp.png
│ │ │ ├── giphy_attribution_dark.png
│ │ │ └── giphy_attribution_light.png
│ │ │ ├── values-v24
│ │ │ └── colors.xml
│ │ │ ├── transition
│ │ │ ├── popupwindow_exit.xml
│ │ │ └── popupwindow_enter.xml
│ │ │ ├── values-land
│ │ │ └── dimens.xml
│ │ │ ├── anim
│ │ │ ├── fade_in_300.xml
│ │ │ ├── fade_out_300.xml
│ │ │ ├── nothing.xml
│ │ │ ├── dialog_fade_in.xml
│ │ │ ├── dialog_fade_out.xml
│ │ │ ├── chromecustomtab_exit_to_bottom.xml
│ │ │ ├── chromecustomtab_enter_from_bottom.xml
│ │ │ ├── submission_options_viewflipper_mainmenu_enter.xml
│ │ │ ├── submission_options_viewflipper_mainmenu_exit.xml
│ │ │ ├── submission_options_viewflipper_submenu_enter.xml
│ │ │ ├── submission_options_viewflipper_submenu_exit.xml
│ │ │ ├── uploadimage_slide_and_fade_out_to_top.xml
│ │ │ ├── uploadimage_slide_and_fade_in_from_bottom.xml
│ │ │ ├── gesture_walkthroughs_slide_and_fade_out_to_top.xml
│ │ │ └── gesture_walkthroughs_slide_and_fade_in_from_bottom.xml
│ │ │ ├── layout
│ │ │ ├── popup_menu_submissions_sorting_mode.xml
│ │ │ ├── list_item_subreddit.xml
│ │ │ ├── list_item_submission_comments_load_error.xml
│ │ │ ├── list_item_submission_comments_load_progress.xml
│ │ │ ├── list_item_gesture_preference_section_header.xml
│ │ │ ├── activity_submission_fragment.xml
│ │ │ ├── list_item_submission_comment_view_full_thread.xml
│ │ │ └── custom_empty_state.xml
│ │ │ ├── drawable-v26
│ │ │ ├── ic_shortcut_subreddit.xml
│ │ │ └── ic_configure_app_shortcuts.xml
│ │ │ ├── xml
│ │ │ └── file_provider_paths.xml
│ │ │ └── menu
│ │ │ ├── menu_webview.xml
│ │ │ ├── menu_share_image.xml
│ │ │ ├── menu_share_video.xml
│ │ │ ├── menu_subredditpicker_overflow_menu.xml
│ │ │ ├── menu_subredditpicker_subreddit_options.xml
│ │ │ ├── menu_compose_reply.xml
│ │ │ └── menu_comment_sorting_mode.xml
│ ├── test
│ │ └── resources
│ │ │ └── mockito-extensions
│ │ │ └── org.mockito.plugins.MockMaker
│ └── debug
│ │ └── res
│ │ └── values
│ │ └── app_constants.xml
└── proguard-rules.pro
├── markdownhints
├── .gitignore
├── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── me
│ │ │ └── saket
│ │ │ └── dank
│ │ │ └── markdownhints
│ │ │ ├── SimpleTextWatcher.java
│ │ │ ├── spans
│ │ │ ├── InlineCodeSpan.java
│ │ │ ├── IndentedCodeBlockSpan.java
│ │ │ └── HeadingSpanWithLevel.java
│ │ │ └── MarkdownHintsSpanWriter.java
│ └── test
│ │ └── java
│ │ └── me
│ │ └── saket
│ │ └── dank
│ │ └── markdownhints
│ │ └── ExampleUnitTest.java
└── proguard-rules.pro
├── settings.gradle
├── jrebel.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── libs
└── threetenbp-1.3.6-sources.jar
├── .gitignore
└── gradle.properties
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/markdownhints/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':markdownhints'
2 |
--------------------------------------------------------------------------------
/jrebel.properties:
--------------------------------------------------------------------------------
1 | gradleLogLevel=trace
2 | agentLogLevel=trace
3 | experimental=true
4 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reddit/Subreddit.kt:
--------------------------------------------------------------------------------
1 | package me.saket.dank.reddit
2 |
3 | interface Subreddit
4 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/UiEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui;
2 |
3 | public interface UiEvent {
4 | }
5 |
--------------------------------------------------------------------------------
/app/src/main/assets/bifocals.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/bifocals.otf
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/libs/threetenbp-1.3.6-sources.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/libs/threetenbp-1.3.6-sources.jar
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/SwipeEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | public interface SwipeEvent {
4 | }
5 |
--------------------------------------------------------------------------------
/app/src/main/res/font/bifocals.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/bifocals.otf
--------------------------------------------------------------------------------
/app/src/main/assets/roboto_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/roboto_regular.ttf
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dank_cat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable/dank_cat.jpg
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_bold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_light.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_thin.ttf
--------------------------------------------------------------------------------
/app/src/main/assets/Inter-UI-Medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/Inter-UI-Medium.otf
--------------------------------------------------------------------------------
/app/src/main/assets/Inter-UI-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/Inter-UI-Regular.otf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_italic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_medium.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_regular.ttf
--------------------------------------------------------------------------------
/app/src/main/assets/readertrial-medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/readertrial-medium.otf
--------------------------------------------------------------------------------
/app/src/main/assets/readertrial-regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/readertrial-regular.otf
--------------------------------------------------------------------------------
/app/src/main/assets/relativetrial-book.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/relativetrial-book.otf
--------------------------------------------------------------------------------
/app/src/main/assets/relativetrial-faux.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/relativetrial-faux.otf
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_text.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_text.ttf
--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/assets/relativetrial-medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/relativetrial-medium.otf
--------------------------------------------------------------------------------
/app/src/main/assets/visuelttrial-regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/visuelttrial-regular.otf
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable/ic_launcher_180.png
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_medium.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_regular.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_bold_italic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_light_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_light_italic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_thin_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_thin_italic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker:
--------------------------------------------------------------------------------
1 | # Enables mocking of final classes in Mockito.
2 |
3 | mock-maker-inline
4 |
--------------------------------------------------------------------------------
/app/src/main/assets/LaFabriqueTrial-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/LaFabriqueTrial-Regular.otf
--------------------------------------------------------------------------------
/app/src/main/assets/LaFabriqueTrial-SemiBold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/LaFabriqueTrial-SemiBold.otf
--------------------------------------------------------------------------------
/app/src/main/assets/RobotoCondensed-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/RobotoCondensed-Regular.ttf
--------------------------------------------------------------------------------
/app/src/main/assets/TranscriptTrial-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/TranscriptTrial-Regular.otf
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_semibold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/roboto_medium_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/roboto_medium_italic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/assets/relativetrial-mono12pitch.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/relativetrial-mono12pitch.otf
--------------------------------------------------------------------------------
/markdownhints/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/app/src/main/assets/basis-grotesque-trial-medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/basis-grotesque-trial-medium.otf
--------------------------------------------------------------------------------
/app/src/main/assets/basis-grotesque-trial-regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/assets/basis-grotesque-trial-regular.otf
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/emoji_waving_hand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-hdpi/emoji_waving_hand.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_status_bar_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-hdpi/ic_status_bar_20dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_status_bar_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-hdpi/ic_status_bar_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/emoji_waving_hand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-mdpi/emoji_waving_hand.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_status_bar_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-mdpi/ic_status_bar_20dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_status_bar_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-mdpi/ic_status_bar_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/emoji_waving_hand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xhdpi/emoji_waving_hand.png
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/SafeFunction.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | public interface SafeFunction {
4 |
5 | O apply(I input);
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_status_bar_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xhdpi/ic_status_bar_20dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_status_bar_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xhdpi/ic_status_bar_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/emoji_waving_hand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxhdpi/emoji_waving_hand.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_status_bar_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxhdpi/ic_status_bar_20dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_status_bar_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxhdpi/ic_status_bar_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/emoji_waving_hand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxxhdpi/emoji_waving_hand.png
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_condensed_medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_condensed_medium.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_condensed_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_condensed_regular.ttf
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_status_bar_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxxhdpi/ic_status_bar_20dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_status_bar_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxxhdpi/ic_status_bar_24dp.png
--------------------------------------------------------------------------------
/app/src/main/res/font/ibmplexsans_condensed_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/font/ibmplexsans_condensed_semibold.ttf
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/OnLoginRequireListener.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | public interface OnLoginRequireListener {
4 | void onLoginRequired();
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/di/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.di;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/giphy_attribution_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxxhdpi/giphy_attribution_dark.png
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/cache/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.cache;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.data;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reply/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.reply;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/vote/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.vote;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/giphy_attribution_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lingarajsankaravelu/Dank/master/app/src/main/res/drawable-xxxhdpi/giphy_attribution_light.png
--------------------------------------------------------------------------------
/app/src/main/res/values-v24/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @color/color_accent
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/notifs/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.notifs;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reddit/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.reddit;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/giphy/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.giphy;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/media/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.media;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/user/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.user;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.widgets;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/swipe/SwipeDirection.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.widgets.swipe;
2 |
3 | public enum SwipeDirection {
4 | END_TO_START,
5 | START_TO_END,
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/res/transition/popupwindow_exit.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/analytics/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.analytics;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/compose/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.compose;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/PrivateSubredditException.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission;
2 |
3 | public class PrivateSubredditException extends RuntimeException {
4 | }
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/webview/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.webview;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reddit/jraw/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.reddit.jraw;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/SubredditNotFoundException.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission;
2 |
3 | public class SubredditNotFoundException extends RuntimeException {
4 | }
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.submission;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.subreddit;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/glide/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils.glide;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/okhttp/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils.okhttp;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/walkthrough/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.walkthrough;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/prefs/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.widgets.prefs;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/span/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.widgets.span;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/swipe/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.widgets.swipe;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/appshortcuts/AppShortcutScreenUiModel.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.appshortcuts;
2 |
3 | public interface AppShortcutScreenUiModel {
4 |
5 | long adapterId();
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/appshortcuts/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.appshortcuts;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.preferences;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/lifecycle/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils.lifecycle;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/markdown/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils.markdown;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/InboxUI/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.widgets.InboxUI;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/UiChange.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui;
2 |
3 | /**
4 | * @param Type of UI.
5 | */
6 | public interface UiChange {
7 |
8 | void render(T ui);
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/authentication/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.authentication;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/compose/OnLinkInsertListener.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.compose;
2 |
3 | public interface OnLinkInsertListener {
4 | void onLinkInsert(String title, String url);
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subscriptions/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.subscriptions;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/user/messages/MessagesRefreshState.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.user.messages;
2 |
3 | public enum MessagesRefreshState {
4 | IN_FLIGHT,
5 | IDLE,
6 | ERROR
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/user/messages/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.user.messages;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/binoculars/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.widgets.binoculars;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.submission.events;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/events/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.subreddit.events;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/itemanimators/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils.itemanimators;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/lifecycle/LifecycleOwner.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.lifecycle;
2 |
3 | public interface LifecycleOwner {
4 |
5 | LifecycleStreams lifecycle();
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/adapter/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.preferences.adapter;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/events/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.preferences.events;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/gestures/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.preferences.gestures;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/adapter/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.submission.adapter;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/uimodels/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.ui.subreddit.uimodels;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/markdown/markwon/package-info.java:
--------------------------------------------------------------------------------
1 | @ParametersAreNonnullByDefault
2 | package me.saket.dank.utils.markdown.markwon;
3 |
4 | import javax.annotation.ParametersAreNonnullByDefault;
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @dimen/spacing12
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/deeplinks/AppDeepLinkModule.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.deeplinks;
2 |
3 | import com.airbnb.deeplinkdispatch.DeepLinkModule;
4 |
5 | @DeepLinkModule
6 | public class AppDeepLinkModule {
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_subreddit_submission_nsfw.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/lifecycle/DialogLifecycleEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.lifecycle;
2 |
3 | public enum DialogLifecycleEvent {
4 | START,
5 | STOP,
6 | RESUME,
7 | PAUSE,
8 | DESTROY
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/media/VideoNotCachedYetException.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.media;
2 |
3 | import java.util.NoSuchElementException;
4 |
5 | public class VideoNotCachedYetException extends NoSuchElementException {
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/lifecycle/ActivityLifecycleEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.lifecycle;
2 |
3 | public enum ActivityLifecycleEvent {
4 | START,
5 | STOP,
6 | RESUME,
7 | PAUSE,
8 | DESTROY
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/lifecycle/FragmentLifecycleEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.lifecycle;
2 |
3 | public enum FragmentLifecycleEvent {
4 | START,
5 | STOP,
6 | RESUME,
7 | PAUSE,
8 | DESTROY
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/DankDialogFragment.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui;
2 |
3 | import me.saket.dank.utils.lifecycle.LifecycleOwnerDialogFragment;
4 |
5 | public class DankDialogFragment extends LifecycleOwnerDialogFragment {
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/debug/res/values/app_constants.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Dank (d)
4 | me.saket.dank.debug.fileprovider
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/CachePreFillThing.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | /**
4 | * Things that can be pre-filled in cache.
5 | */
6 | public enum CachePreFillThing {
7 | COMMENTS,
8 | IMAGES,
9 | LINK_METADATA
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/fade_in_300.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/lifecycle/ViewLifecycleEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.lifecycle;
2 |
3 | public enum ViewLifecycleEvent {
4 | ATTACH,
5 | DETACH,
6 | START,
7 | STOP,
8 | RESUME,
9 | PAUSE,
10 | DESTROY
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/fade_out_300.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/integers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 250
4 | 250
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/Function0.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | /**
4 | * Because Func0 no longer exists in RxJava2.
5 | *
6 | * TODO: Convert to Supplier.
7 | */
8 | public interface Function0 {
9 | T calculate();
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/exceptions/InvalidImgurAlbumException.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data.exceptions;
2 |
3 | /**
4 | * Thrown when Imgur returns no images for a link.
5 | */
6 | public class InvalidImgurAlbumException extends RuntimeException {
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_appshortcut_preview_launcher_icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_link_favicon_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_self_thumbnail.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_user_profile_popup_image_placeholder.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shortcut_subreddit_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/UserPreferenceNestedScreen.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences;
2 |
3 | import android.view.View;
4 |
5 | public interface UserPreferenceNestedScreen {
6 |
7 | void setNavigationOnClickListener(View.OnClickListener listener);
8 | }
9 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sat Aug 19 17:11:42 IST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/popup_menu_submissions_sorting_mode.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/InfinitelyScrollableRecyclerViewAdapter.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | public interface InfinitelyScrollableRecyclerViewAdapter {
4 |
5 | /**
6 | * Decorators == headers, footers, etc.
7 | */
8 | int getItemCountMinusDecorators();
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/swipe/ViewHolderWithSwipeActions.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.widgets.swipe;
2 |
3 | /**
4 | * ViewHolder that wraps a {@link SwipeableLayout} for RecyclerView rows.
5 | */
6 | public interface ViewHolderWithSwipeActions {
7 | SwipeableLayout getSwipeableLayout();
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_image_scroll_hint.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/nothing.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_header_archived_label.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/exceptions/ImgurApiRequestRateLimitReachedException.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data.exceptions;
2 |
3 | /**
4 | * Thrown when Dank runs out Imgur rate limits, in order to avoid over-billing.
5 | */
6 | public class ImgurApiRequestRateLimitReachedException extends RuntimeException {
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/exceptions/ImgurApiUploadRateLimitReachedException.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data.exceptions;
2 |
3 | /**
4 | * Thrown when Dank runs out Imgur rate limits, in order to avoid over-billing.
5 | */
6 | public class ImgurApiUploadRateLimitReachedException extends RuntimeException {
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_popup_window.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_comment_reply.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/dialog_fade_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/dialog_fade_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_self_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/chromecustomtab_exit_to_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_mediaalbumviewer_error_state.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_message_content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_comment_options.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_link.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/chromecustomtab_enter_from_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_media_progress_bar_file_size.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings_progress_with_file_size.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | %d B
4 | %d KB
5 | %d MB
6 | %d GB
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/submission_options_viewflipper_mainmenu_enter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/submission_options_viewflipper_mainmenu_exit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/submission_options_viewflipper_submenu_enter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/submission_options_viewflipper_submenu_exit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_toolbar_shadows.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/analytics/AnalyticsDaggerModule.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.analytics;
2 |
3 | import dagger.Module;
4 | import dagger.Provides;
5 |
6 | @Module
7 | public class AnalyticsDaggerModule {
8 |
9 | @Provides
10 | static CrashReporter crashReporter(BugsnagCrashReporter bugsnag) {
11 | return bugsnag;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/compose/MarkdownAction.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.compose;
2 |
3 | public enum MarkdownAction {
4 | BOLD,
5 | ITALIC,
6 | INSERT_TEXT_EMOJI,
7 | INSERT_LINK,
8 | INSERT_IMAGE,
9 | INSERT_GIF,
10 | STRIKE_THROUGH,
11 | QUOTE,
12 | SUPERSCRIPT,
13 | INLINE_CODE,
14 | HEADING,
15 | SPOILER
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/okhttp/OkHttpRequestWriteProgressListener.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.okhttp;
2 |
3 | /**
4 | * For listening to response read progress with {@link OkHttpRequestWriteProgressListener}.
5 | */
6 | public interface OkHttpRequestWriteProgressListener {
7 |
8 | void update(long bytesRead, long totalBytes);
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_submission_view_full_thread.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/events/UserPreferenceClickListener.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences.events;
2 |
3 | import me.saket.dank.ui.preferences.PreferenceButtonClickHandler;
4 |
5 | public interface UserPreferenceClickListener {
6 |
7 | void onClick(PreferenceButtonClickHandler clickHandler, UserPreferenceButtonClickEvent event);
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionMediaLoadFailed.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionMediaLoadFailed implements UiEvent {
6 |
7 | public static SubmissionMediaLoadFailed create() {
8 | return new SubmissionMediaLoadFailed();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_item_subreddit.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/analytics/CrashReporter.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.analytics;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import timber.log.Timber;
6 |
7 | public interface CrashReporter {
8 |
9 | Timber.Tree timberTree();
10 |
11 | void notify(Throwable throwable);
12 |
13 | void identifyUser(@Nullable String user);
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionImageLoadStarted.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionImageLoadStarted implements UiEvent {
6 |
7 | public static SubmissionImageLoadStarted create() {
8 | return new SubmissionImageLoadStarted();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionVideoLoadStarted.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionVideoLoadStarted implements UiEvent {
6 |
7 | public static SubmissionVideoLoadStarted create() {
8 | return new SubmissionVideoLoadStarted();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/events/SubredditScreenCreateEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.subreddit.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubredditScreenCreateEvent implements UiEvent {
6 |
7 | public static SubredditScreenCreateEvent create() {
8 | return new SubredditScreenCreateEvent();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_mediaalbumviewer_options_gradient.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reply/DraftSaveResult.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.reply;
2 |
3 | public enum DraftSaveResult {
4 | SAVED_OR_UPDATED(true),
5 | REMOVED(false),;
6 |
7 | public final boolean canShowDraftSavedToast;
8 |
9 | DraftSaveResult(boolean canShowDraftSavedToast) {
10 | this.canShowDraftSavedToast = canShowDraftSavedToast;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/media/ImgurResponse.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.media;
2 |
3 | import java.util.List;
4 |
5 | public interface ImgurResponse {
6 |
7 | String id();
8 |
9 | boolean hasImages();
10 |
11 | boolean isAlbum();
12 |
13 | List images();
14 |
15 | String albumTitle();
16 |
17 | String albumCoverImageUrl();
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionCommentsLoadFailed.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionCommentsLoadFailed implements UiEvent {
6 |
7 | public static SubmissionCommentsLoadFailed create() {
8 | return new SubmissionCommentsLoadFailed();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionImageLoadSucceeded.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionImageLoadSucceeded implements UiEvent {
6 |
7 | public static SubmissionImageLoadSucceeded create() {
8 | return new SubmissionImageLoadSucceeded();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionNsfwContentFiltered.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionNsfwContentFiltered implements UiEvent {
6 |
7 | public static SubmissionNsfwContentFiltered create() {
8 | return new SubmissionNsfwContentFiltered();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionVideoLoadSucceeded.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionVideoLoadSucceeded implements UiEvent {
6 |
7 | public static SubmissionVideoLoadSucceeded create() {
8 | return new SubmissionVideoLoadSucceeded();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/user/UserSession.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.user;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | @AutoValue
6 | public abstract class UserSession {
7 |
8 | public abstract String username();
9 |
10 | public static UserSession create(String username) {
11 | return new AutoValue_UserSession(username);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | -
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionContentResolvingFailed.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionContentResolvingFailed implements UiEvent {
6 |
7 | public static SubmissionContentResolvingFailed create() {
8 | return new SubmissionContentResolvingFailed();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_back_20dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/StubPublicContribution.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | import net.dean.jraw.models.PublicContribution;
4 |
5 | @Deprecated
6 | public abstract class StubPublicContribution implements PublicContribution {
7 |
8 | @Override
9 | public abstract boolean equals(Object otherObject);
10 |
11 | @Override
12 | public abstract int hashCode();
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionContentResolvingStarted.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionContentResolvingStarted implements UiEvent {
6 |
7 | public static SubmissionContentResolvingStarted create() {
8 | return new SubmissionContentResolvingStarted();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionViewFullCommentsClicked.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import me.saket.dank.ui.UiEvent;
4 |
5 | public class SubmissionViewFullCommentsClicked implements UiEvent {
6 |
7 | public static SubmissionViewFullCommentsClicked create() {
8 | return new SubmissionViewFullCommentsClicked();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_done_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_send_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_drag_handle_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_downward_18dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete_20dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_format_italic_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_format_quote_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sort_16dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sort_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_item_submission_comments_load_error.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_archive_32dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reply_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_upward_12dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_upward_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close_20dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reply_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v26/ic_shortcut_subreddit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_downward_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/AppInfo.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | import javax.inject.Inject;
4 |
5 | import me.saket.dank.BuildConfig;
6 |
7 | public class AppInfo {
8 |
9 | @Inject
10 | public AppInfo() {
11 | }
12 |
13 | public String appVersionName() {
14 | return BuildConfig.VERSION_NAME;
15 | }
16 |
17 | public int appVersionCode() {
18 | return BuildConfig.VERSION_CODE;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_text_fields_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_text_fields_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/markdownhints/src/main/java/me/saket/dank/markdownhints/SimpleTextWatcher.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.markdownhints;
2 |
3 | import android.text.TextWatcher;
4 |
5 | abstract class SimpleTextWatcher implements TextWatcher {
6 | @Override
7 | public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
8 |
9 | @Override
10 | public void onTextChanged(CharSequence s, int start, int before, int count) {}
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/adapter/SubmissionCommentRowType.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.adapter;
2 |
3 | public enum SubmissionCommentRowType {
4 | SUBMISSION_HEADER,
5 | MEDIA_CONTENT_LOAD_ERROR,
6 | COMMENT_OPTIONS,
7 | VIEW_FULL_THREAD,
8 | COMMENTS_LOAD_PROGRESS,
9 | COMMENTS_LOAD_ERROR,
10 | REMOTE_USER_COMMENT,
11 | LOCAL_USER_COMMENT,
12 | INLINE_REPLY,
13 | LOAD_MORE_COMMENTS,
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/uploadimage_slide_and_fade_out_to_top.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v26/ic_configure_app_shortcuts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/markdownhints/src/main/java/me/saket/dank/markdownhints/spans/InlineCodeSpan.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.markdownhints.spans;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import ru.noties.markwon.spans.CodeSpan;
6 | import ru.noties.markwon.spans.SpannableTheme;
7 |
8 | public class InlineCodeSpan extends CodeSpan {
9 |
10 | public InlineCodeSpan(@NonNull SpannableTheme theme) {
11 | super(theme, false);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/SubmissionVideoClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | @AutoValue
6 | public abstract class SubmissionVideoClickEvent {
7 |
8 | public abstract long seekPosition();
9 |
10 | public static SubmissionVideoClickEvent create(long seekPosition) {
11 | return new AutoValue_SubmissionVideoClickEvent(seekPosition);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/Units.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.content.Context;
4 | import android.support.annotation.Px;
5 | import android.util.TypedValue;
6 |
7 | public class Units {
8 |
9 | @Px
10 | public static int dpToPx(float dpValue, Context context) {
11 | return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, context.getResources().getDisplayMetrics());
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/uploadimage_slide_and_fade_in_from_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_forward_12dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_save_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_toolbar_close_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/gesture_walkthroughs_slide_and_fade_out_to_top.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_save_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/gesture_walkthroughs_slide_and_fade_in_from_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_code_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_mail_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/AutoValueMoshiAdapterFactory.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import com.ryanharter.auto.value.moshi.MoshiAdapterFactory;
4 | import com.squareup.moshi.JsonAdapter;
5 |
6 | @MoshiAdapterFactory
7 | public abstract class AutoValueMoshiAdapterFactory implements JsonAdapter.Factory {
8 |
9 | public static JsonAdapter.Factory create() {
10 | return new AutoValueMoshi_AutoValueMoshiAdapterFactory();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_fullscreen_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_subreddits_20dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/markdownhints/src/main/java/me/saket/dank/markdownhints/spans/IndentedCodeBlockSpan.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.markdownhints.spans;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import ru.noties.markwon.spans.CodeSpan;
6 | import ru.noties.markwon.spans.SpannableTheme;
7 |
8 | public class IndentedCodeBlockSpan extends CodeSpan {
9 |
10 | public IndentedCodeBlockSpan(@NonNull SpannableTheme theme) {
11 | super(theme, true);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_subreddits_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionCommentsRefreshClicked.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import me.saket.dank.ui.UiEvent;
6 |
7 | @AutoValue
8 | public abstract class SubmissionCommentsRefreshClicked implements UiEvent {
9 |
10 | public static SubmissionCommentsRefreshClicked create() {
11 | return new AutoValue_SubmissionCommentsRefreshClicked();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/urlparser/RedditLink.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.urlparser;
2 |
3 | /**
4 | * A reddit.com link.
5 | */
6 | public abstract class RedditLink extends Link {
7 |
8 | public enum RedditLinkType {
9 | COMMENT,
10 | SUBMISSION,
11 | SUBREDDIT,
12 | USER,
13 | }
14 |
15 | @Override
16 | public Link.Type type() {
17 | return Link.Type.REDDIT_PAGE;
18 | }
19 |
20 | public abstract RedditLinkType redditLinkType();
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/urlparser/UnresolvedMediaLink.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.urlparser;
2 |
3 | /**
4 | * Implemented by {@link Link} classes whose actual data is unknown. For an Imgur album, this will be true
5 | * when only the album URL is known and the title, description, cover images, etc. will have to be looked up.
6 | * For Streamable, this will true when direct links to the video needs to be looked up.
7 | */
8 | public interface UnresolvedMediaLink {
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_configure_app_shortcuts_foreground.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_error_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/submission_seekbar_video_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reddit/RedditModule.kt:
--------------------------------------------------------------------------------
1 | package me.saket.dank.reddit
2 |
3 | import dagger.Module
4 | import dagger.Provides
5 | import me.saket.dank.reddit.jraw.JrawReddit
6 | import me.saket.dank.reddit.jraw.JrawRedditModule
7 | import javax.inject.Singleton
8 |
9 | @Module(includes = [JrawRedditModule::class])
10 | class RedditModule {
11 |
12 | @Provides
13 | @Singleton
14 | fun reddit(jrawReddit: JrawReddit): Reddit {
15 | return jrawReddit
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_12dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_smartphone_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/SubredditChangeEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.subreddit;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import me.saket.dank.ui.UiEvent;
6 |
7 | @AutoValue
8 | public abstract class SubredditChangeEvent implements UiEvent {
9 |
10 | public abstract String subredditName();
11 |
12 | public static SubredditChangeEvent create(String subredditName) {
13 | return new AutoValue_SubredditChangeEvent(subredditName);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/DeviceInfo.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.os.Build;
4 |
5 | import javax.inject.Inject;
6 |
7 | public class DeviceInfo {
8 |
9 | @Inject
10 | public DeviceInfo() {
11 | }
12 |
13 | public boolean isRunningOnEmulator() {
14 | return Build.FINGERPRINT.contains("generic");
15 | }
16 |
17 | public boolean isNougatMrOneOrAbove() {
18 | return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_circle_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_mail_unread_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_textsms_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_image_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/BackPressCallback.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | @AutoValue
6 | public abstract class BackPressCallback {
7 |
8 | public abstract boolean intercepted();
9 |
10 | public static BackPressCallback asIntercepted() {
11 | return new AutoValue_BackPressCallback(true);
12 | }
13 |
14 | public static BackPressCallback asIgnored() {
15 | return new AutoValue_BackPressCallback(false);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_edit_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_gif_32dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_redo_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_submission_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_undo_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_more_vert_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_open_in_new_tab_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_copy_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_network_cell_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/file_provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
14 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/ReplyDiscardClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import net.dean.jraw.models.Identifiable;
6 |
7 | @AutoValue
8 | public abstract class ReplyDiscardClickEvent {
9 |
10 | public abstract Identifiable parent();
11 |
12 | public static ReplyDiscardClickEvent create(Identifiable parentContribution) {
13 | return new AutoValue_ReplyDiscardClickEvent(parentContribution);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/touchindicator_submission_thumbnail.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 | -
6 |
7 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/SubmissionUi.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission;
2 |
3 | import me.saket.dank.ui.submission.events.SubmissionChangeCommentSortClicked;
4 | import me.saket.dank.utils.DankSubmissionRequest;
5 |
6 | interface SubmissionUi {
7 |
8 | void showProgress();
9 |
10 | void hideProgress();
11 |
12 | void acceptRequest(DankSubmissionRequest lastRequest);
13 |
14 | void showChangeSortPopup(SubmissionChangeCommentSortClicked event, DankSubmissionRequest activeRequest);
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/SimpleTextWatcher.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.text.Editable;
4 | import android.text.TextWatcher;
5 |
6 | public abstract class SimpleTextWatcher implements TextWatcher {
7 | @Override
8 | public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
9 |
10 | @Override
11 | public void onTextChanged(CharSequence s, int start, int before, int count) {}
12 |
13 | @Override
14 | public void afterTextChanged(Editable s) {}
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/transition/popupwindow_enter.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
7 |
8 |
9 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/appshortcuts/AppShortcutPlaceholderUiModel.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.appshortcuts;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | @AutoValue
6 | public abstract class AppShortcutPlaceholderUiModel implements AppShortcutScreenUiModel {
7 |
8 | @Override
9 | public long adapterId() {
10 | return AppShortcutsAdapter.ID_ADD_NEW;
11 | }
12 |
13 | public static AppShortcutPlaceholderUiModel create() {
14 | return new AutoValue_AppShortcutPlaceholderUiModel();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/okhttp/OkHttpResponseReadProgressListener.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.okhttp;
2 |
3 | import okhttp3.HttpUrl;
4 |
5 | /**
6 | * For listening to response read progress with {@link OkHttpResponseBodyWithProgress}.
7 | */
8 | public interface OkHttpResponseReadProgressListener {
9 |
10 | /**
11 | * @param expectedContentBytes Expected length reported by the server. This may or may not be exact.
12 | */
13 | void update(HttpUrl url, long bytesRead, long expectedContentBytes);
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_mode_comment_16dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/SimpleRecyclerViewOnChildAttachStateChangeListener.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.support.v7.widget.RecyclerView;
4 | import android.view.View;
5 |
6 | public abstract class SimpleRecyclerViewOnChildAttachStateChangeListener implements RecyclerView.OnChildAttachStateChangeListener {
7 | @Override
8 | public void onChildViewAttachedToWindow(View view) {
9 |
10 | }
11 |
12 | @Override
13 | public void onChildViewDetachedFromWindow(View view) {
14 |
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/EmptyState.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | import android.support.annotation.StringRes;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | @AutoValue
8 | public abstract class EmptyState {
9 |
10 | @StringRes
11 | public abstract int emojiRes();
12 |
13 | @StringRes
14 | public abstract int messageRes();
15 |
16 | public static EmptyState create(@StringRes int emojisRes, @StringRes int messageRes) {
17 | return new AutoValue_EmptyState(emojisRes, messageRes);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/FileSize.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import me.saket.dank.utils.FileSizeUnit;
6 |
7 | @AutoValue
8 | public abstract class FileSize {
9 |
10 | public abstract int size();
11 |
12 | public abstract FileSizeUnit unit();
13 |
14 | public static FileSize create(int size, FileSizeUnit unit) {
15 | return new AutoValue_FileSize(size, unit);
16 | }
17 |
18 | public double bytes() {
19 | return unit().toBytes(size());
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_done_all_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_webview.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/markdownhints/src/test/java/me/saket/dank/markdownhints/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.markdownhints;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 |
14 | @Test
15 | public void addition_isCorrect() throws Exception {
16 | assertEquals(4, 2 + 2);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_more_horiz_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reddit/jraw/JrawUsers.kt:
--------------------------------------------------------------------------------
1 | package me.saket.dank.reddit.jraw
2 |
3 | import io.reactivex.Observable
4 | import io.reactivex.Single
5 | import me.saket.dank.reddit.Reddit
6 | import net.dean.jraw.RedditClient
7 | import net.dean.jraw.models.AccountQuery
8 |
9 | class JrawUsers(private val clients: Observable) : Reddit.Users {
10 |
11 | override fun fetch(username: String): Single {
12 | return clients
13 | .firstOrError()
14 | .map { it.user(username).query() }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/user/messages/MessageClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.user.messages;
2 |
3 | import android.view.View;
4 | import com.google.auto.value.AutoValue;
5 | import net.dean.jraw.models.Message;
6 |
7 | @AutoValue
8 | public abstract class MessageClickEvent {
9 |
10 | public abstract Message message();
11 |
12 | public abstract View itemView();
13 |
14 | public static MessageClickEvent create(Message message, View itemView) {
15 | return new AutoValue_MessageClickEvent(message, itemView);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/swipe/SwipeActionIconView.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.widgets.swipe;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.AppCompatImageView;
5 | import android.util.AttributeSet;
6 |
7 | /**
8 | * Note: prefer using equi-sized icons for all gestures. Different sizes aren't supported very well.
9 | */
10 | public class SwipeActionIconView extends AppCompatImageView {
11 |
12 | public SwipeActionIconView(Context context, AttributeSet attrs) {
13 | super(context, attrs);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cloud_download_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shortcut_subreddit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_time_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/urlparser/RedditHostedVideoDashPlaylist.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.urlparser;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | @AutoValue
6 | public abstract class RedditHostedVideoDashPlaylist {
7 |
8 | public abstract String dashUrl();
9 |
10 | public abstract String directUrlWithoutAudio();
11 |
12 | public static RedditHostedVideoDashPlaylist create(String playlistUrl, String dashUrlWithoutAudio) {
13 | return new AutoValue_RedditHostedVideoDashPlaylist(playlistUrl, dashUrlWithoutAudio);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_configure_app_shortcuts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_photo_library_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_unsave_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_unsave_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_share_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_share_video.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/splash/SplashActivity.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.splash;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 |
6 | import me.saket.dank.ui.DankActivity;
7 | import me.saket.dank.ui.subreddit.SubredditActivity;
8 |
9 | public class SplashActivity extends DankActivity {
10 |
11 | @Override
12 | protected void onCreate(@Nullable Bundle savedInstanceState) {
13 | super.onCreate(savedInstanceState);
14 | startActivity(SubredditActivity.intent(this));
15 | finish();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/MarkMessageAsReadRequested.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import net.dean.jraw.models.Message;
6 |
7 | import me.saket.dank.ui.UiEvent;
8 |
9 | @AutoValue
10 | public abstract class MarkMessageAsReadRequested implements UiEvent {
11 |
12 | public abstract Message message();
13 |
14 | public static MarkMessageAsReadRequested create(Message message) {
15 | return new AutoValue_MarkMessageAsReadRequested(message);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_link_20dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_link_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_logout_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/FocusedComment.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import me.saket.dank.data.FullNameType;
6 |
7 | @AutoValue
8 | public abstract class FocusedComment {
9 |
10 | public abstract String fullname();
11 |
12 | public static FocusedComment create(String id) {
13 | if (id.startsWith(FullNameType.COMMENT.prefix())) {
14 | throw new AssertionError();
15 | }
16 | return new AutoValue_FocusedComment(FullNameType.COMMENT.prefix() + id);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/ReplyInsertGifClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import android.os.Parcelable;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | @AutoValue
8 | public abstract class ReplyInsertGifClickEvent implements Parcelable {
9 |
10 | /**
11 | * Adapter ID of this row.
12 | */
13 | public abstract long replyRowItemId();
14 |
15 | public static ReplyInsertGifClickEvent create(long replyRowItemId) {
16 | return new AutoValue_ReplyInsertGifClickEvent(replyRowItemId);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/SubredditUi.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.subreddit;
2 |
3 | import android.view.View;
4 |
5 | import net.dean.jraw.models.Submission;
6 |
7 | import me.saket.dank.utils.DankSubmissionRequest;
8 |
9 | public interface SubredditUi {
10 |
11 | void setToolbarUserProfileIcon(SubredditUserProfileIconType iconType);
12 |
13 | void populateSubmission(Submission submission, DankSubmissionRequest submissionRequest, String currentSubredditName);
14 |
15 | void expandSubmissionRow(View submissionRowView, long submissionRowId);
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_refresh_18dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_user_profile_20dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_user_profile_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/markdownhints/src/main/java/me/saket/dank/markdownhints/spans/HeadingSpanWithLevel.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.markdownhints.spans;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import ru.noties.markwon.spans.SpannableTheme;
6 |
7 | public class HeadingSpanWithLevel extends ru.noties.markwon.spans.HeadingSpan {
8 |
9 | private final int level;
10 |
11 | public HeadingSpanWithLevel(@NonNull SpannableTheme theme, int level) {
12 | super(theme, level);
13 | this.level = level;
14 | }
15 |
16 | public int level() {
17 | return level;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionChangeCommentSortClicked.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import android.view.View;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | import me.saket.dank.ui.UiEvent;
8 |
9 | @AutoValue
10 | public abstract class SubmissionChangeCommentSortClicked implements UiEvent {
11 |
12 | public abstract View buttonView();
13 |
14 | public static SubmissionChangeCommentSortClicked create(View buttonView) {
15 | return new AutoValue_SubmissionChangeCommentSortClicked(buttonView);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionRequestChanged.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import me.saket.dank.ui.UiEvent;
6 | import me.saket.dank.utils.DankSubmissionRequest;
7 |
8 | @AutoValue
9 | public abstract class SubmissionRequestChanged implements UiEvent {
10 |
11 | public abstract DankSubmissionRequest request();
12 |
13 | public static SubmissionRequestChanged create(DankSubmissionRequest request) {
14 | return new AutoValue_SubmissionRequestChanged(request);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_search_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/user/UserProfile.kt:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.user
2 |
3 | import com.squareup.moshi.JsonClass
4 | import net.dean.jraw.models.Account
5 |
6 | sealed class UserProfileSearchResult
7 |
8 | @JsonClass(generateAdapter = true)
9 | data class UserProfile(
10 | val account: Account,
11 | val userSubreddit: UserSubreddit?
12 | ) : UserProfileSearchResult()
13 |
14 | class UserNotFound : UserProfileSearchResult()
15 |
16 | class UserSuspended : UserProfileSearchResult()
17 |
18 | data class UnexpectedError(val error: Throwable) : UserProfileSearchResult()
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_32dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_volume_up_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionCommentSortChanged.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import net.dean.jraw.models.CommentSort;
6 |
7 | import me.saket.dank.ui.UiEvent;
8 |
9 | @AutoValue
10 | public abstract class SubmissionCommentSortChanged implements UiEvent {
11 |
12 | public abstract CommentSort selectedSort();
13 |
14 | public static SubmissionCommentSortChanged create(CommentSort selectedSort) {
15 | return new AutoValue_SubmissionCommentSortChanged(selectedSort);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/SubredditUserProfileIconType.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.subreddit;
2 |
3 | import me.saket.dank.R;
4 |
5 | public enum SubredditUserProfileIconType {
6 | USER_PROFILE {
7 | @Override
8 | public int iconRes() {
9 | return R.drawable.ic_user_profile_24dp;
10 | }
11 | },
12 |
13 | USER_PROFILE_WITH_UNREAD_MESSAGES {
14 | @Override
15 | public int iconRes() {
16 | return R.drawable.ic_mail_unread_24dp;
17 | }
18 | };
19 |
20 | public int iconRes() {
21 | throw new AbstractMethodError();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_refresh_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_item_submission_comments_load_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_subredditpicker_overflow_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/InlineReplyRequestEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import net.dean.jraw.models.Identifiable;
6 |
7 | import me.saket.dank.data.SwipeEvent;
8 |
9 | @AutoValue
10 | public abstract class InlineReplyRequestEvent implements SwipeEvent {
11 |
12 | public abstract Identifiable parentContribution();
13 |
14 | public static InlineReplyRequestEvent create(Identifiable parentContribution) {
15 | return new AutoValue_InlineReplyRequestEvent(parentContribution);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/LinearSmoothScrollerWithVerticalSnapPref.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.LinearSmoothScroller;
5 |
6 | public class LinearSmoothScrollerWithVerticalSnapPref extends LinearSmoothScroller {
7 | private final int snapPref;
8 |
9 | public LinearSmoothScrollerWithVerticalSnapPref(Context context, int snapPref) {
10 | super(context);
11 | this.snapPref = snapPref;
12 | }
13 |
14 | @Override
15 | protected int getVerticalSnapPreference() {
16 | return snapPref;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/itemanimators/SlideLeftAlphaAnimator.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.itemanimators;
2 |
3 | import android.view.View;
4 |
5 | public class SlideLeftAlphaAnimator extends SlideAlphaAnimator {
6 |
7 | public SlideLeftAlphaAnimator(int itemViewElevation) {
8 | super(itemViewElevation);
9 | }
10 |
11 | protected float getAnimationTranslationX(View itemView) {
12 | return -dpToPx(32, itemView.getContext());
13 | }
14 |
15 | @Override
16 | protected float getAnimationTranslationY(View itemView) {
17 | return 0;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_block_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_block_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_format_header_pound.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/ReplyRetrySendClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import me.saket.dank.reply.PendingSyncReply;
6 | import me.saket.dank.ui.UiEvent;
7 |
8 | @AutoValue
9 | public abstract class ReplyRetrySendClickEvent implements UiEvent {
10 |
11 | public abstract PendingSyncReply failedPendingSyncReply();
12 |
13 | public static ReplyRetrySendClickEvent create(PendingSyncReply failedPendingSyncReply) {
14 | return new AutoValue_ReplyRetrySendClickEvent(failedPendingSyncReply);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/media/MediaAlbumItem.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.media;
2 |
3 | import android.os.Parcelable;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | import me.saket.dank.urlparser.MediaLink;
8 |
9 | @AutoValue
10 | public abstract class MediaAlbumItem implements Parcelable {
11 |
12 | public abstract MediaLink mediaLink();
13 |
14 | public abstract boolean highDefinitionEnabled();
15 |
16 | public static MediaAlbumItem create(MediaLink mediaLink, boolean highDefinitionEnabled) {
17 | return new AutoValue_MediaAlbumItem(mediaLink, highDefinitionEnabled);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/PersistableBundleUtils.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.os.PersistableBundle;
4 |
5 | public class PersistableBundleUtils {
6 |
7 | /**
8 | * Because {@link PersistableBundle} added support for putting booleans only in API 22.
9 | */
10 | public static void putBoolean(PersistableBundle bundle, String key, boolean value) {
11 | bundle.putString(key, String.valueOf(value));
12 | }
13 |
14 | public static boolean getBoolean(PersistableBundle bundle, String key) {
15 | return Boolean.parseBoolean(bundle.getString(key));
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/Themes.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.support.annotation.ColorRes;
4 |
5 | import net.dean.jraw.models.VoteDirection;
6 |
7 | import me.saket.dank.R;
8 |
9 | public class Themes {
10 |
11 | @ColorRes
12 | public static int voteColor(VoteDirection voteDirection) {
13 | switch (voteDirection) {
14 | case UP:
15 | return R.color.vote_direction_upvote;
16 | case DOWN:
17 | return R.color.vote_direction_downvote;
18 | default:
19 | case NONE:
20 | return R.color.vote_direction_none;
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_format_bold_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shortcut_subreddit_foreground.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/events/UserPreferenceSwitchToggleEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences.events;
2 |
3 | import com.f2prateek.rx.preferences2.Preference;
4 | import com.google.auto.value.AutoValue;
5 |
6 | @AutoValue
7 | public abstract class UserPreferenceSwitchToggleEvent {
8 |
9 | public abstract Preference preference();
10 |
11 | public abstract boolean isChecked();
12 |
13 | public static UserPreferenceSwitchToggleEvent create(Preference preference, boolean isChecked) {
14 | return new AutoValue_UserPreferenceSwitchToggleEvent(preference, isChecked);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/urlparser/ExternalLink.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.urlparser;
2 |
3 | import android.os.Parcelable;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | /**
8 | * Link that can only be opened in a browser.
9 | */
10 | @AutoValue
11 | public abstract class ExternalLink extends Link implements Parcelable {
12 |
13 | @Override
14 | public abstract String unparsedUrl();
15 |
16 | @Override
17 | public Type type() {
18 | return Type.EXTERNAL;
19 | }
20 |
21 | public static ExternalLink create(String unparsedUrl) {
22 | return new AutoValue_ExternalLink(unparsedUrl);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/vote/VoteDirectionX.kt:
--------------------------------------------------------------------------------
1 | package me.saket.dank.vote
2 |
3 | import net.dean.jraw.models.VoteDirection
4 |
5 | class VoteDirectionX {
6 |
7 | companion object {
8 |
9 | /**
10 | * [VoteDirection] had different enum names before v0.6.1.
11 | */
12 | @JvmStatic
13 | fun valueOfWithMigration(voteString: String): VoteDirection {
14 | return when (voteString) {
15 | "UPVOTE" -> VoteDirection.UP
16 | "DOWNVOTE" -> VoteDirection.DOWN
17 | "NO_VOTE" -> VoteDirection.NONE
18 | else -> VoteDirection.valueOf(voteString)
19 | }
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/ScreenSavedState.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui;
2 |
3 | import android.os.Bundle;
4 | import android.os.Parcelable;
5 | import android.support.annotation.Nullable;
6 |
7 | import com.google.auto.value.AutoValue;
8 |
9 | @AutoValue
10 | public abstract class ScreenSavedState implements Parcelable {
11 |
12 | @Nullable
13 | public abstract Parcelable superSavedState();
14 |
15 | public abstract Bundle values();
16 |
17 | public static ScreenSavedState combine(@Nullable Parcelable superSavedState, Bundle values) {
18 | return new AutoValue_ScreenSavedState(superSavedState, values);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/itemanimators/SubmissionCommentsItemAnimator.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.itemanimators;
2 |
3 | import android.view.View;
4 |
5 | public class SubmissionCommentsItemAnimator extends SlideAlphaAnimator {
6 |
7 | public SubmissionCommentsItemAnimator(int itemViewElevation) {
8 | super(itemViewElevation);
9 | }
10 |
11 | @Override
12 | protected float getAnimationTranslationX(View itemView) {
13 | return 0;
14 | }
15 |
16 | protected float getAnimationTranslationY(View itemView) {
17 | return -dpToPx(32, itemView.getContext());
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_outline_16dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/giphy/GiphyGif.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.giphy;
2 |
3 | import android.os.Parcelable;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | /**
8 | * A GIF on giphy.com.
9 | */
10 | @AutoValue
11 | public abstract class GiphyGif implements Parcelable {
12 |
13 | public abstract String id();
14 |
15 | public abstract String title();
16 |
17 | public abstract String url();
18 |
19 | public abstract String previewUrl();
20 |
21 | public static GiphyGif create(String id, String title, String url, String previewUrl) {
22 | return new AutoValue_GiphyGif(id, title, url, previewUrl);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/notifs/NotificationConstants.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.notifs;
2 |
3 | /**
4 | * Single place to store all notif constants to ensure they're unique.
5 | */
6 | public class NotificationConstants {
7 | public static final int ID_UNREAD_MESSAGES_BUNDLE_SUMMARY = 100;
8 | public static final String UNREAD_MESSAGE_BUNDLE_NOTIFS_GROUP_KEY = "unreadMessagesBundle";
9 | public static final String UNREAD_MESSAGE_PREFIX_ = "unreadMessage_";
10 |
11 | public static final String ID_MEDIA_DOWNLOAD_PROGRESS_PREFIX_ = "mediaDownloadProgress_";
12 | public static final String MEDIA_DOWNLOAD_GROUP = "mediaDownloadNotifs";
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/PreferenceButtonClickHandler.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences;
2 |
3 | import android.content.Intent;
4 | import android.support.annotation.LayoutRes;
5 | import android.support.v7.widget.RecyclerView;
6 |
7 | import me.saket.dank.urlparser.Link;
8 |
9 | public interface PreferenceButtonClickHandler {
10 |
11 | void expandNestedPage(@LayoutRes int nestedLayoutRes, RecyclerView.ViewHolder viewHolderToExpand);
12 |
13 | void show(MultiOptionPreferencePopup.Builder popupBuilder, RecyclerView.ViewHolder viewHolder);
14 |
15 | void openIntent(Intent intent);
16 |
17 | void openLink(Link link);
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/Cursors.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.database.Cursor;
4 |
5 | @SuppressWarnings("SpellCheckingInspection")
6 | public class Cursors {
7 |
8 | public static String string(Cursor cursor, String columnName) {
9 | return cursor.getString(cursor.getColumnIndexOrThrow(columnName));
10 | }
11 |
12 | public static long longg(Cursor cursor, String columnName) {
13 | return cursor.getLong(cursor.getColumnIndexOrThrow(columnName));
14 | }
15 |
16 | public static int intt(Cursor cursor, String columnName) {
17 | return cursor.getInt(cursor.getColumnIndexOrThrow(columnName));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/urlparser/RedditUserLink.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.urlparser;
2 |
3 | import android.os.Parcelable;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | @AutoValue
8 | public abstract class RedditUserLink extends RedditLink implements Parcelable {
9 |
10 | @Override
11 | public abstract String unparsedUrl();
12 |
13 | public abstract String name();
14 |
15 | @Override
16 | public RedditLinkType redditLinkType() {
17 | return RedditLinkType.USER;
18 | }
19 |
20 | public static RedditUserLink create(String unparsedUrl, String userName) {
21 | return new AutoValue_RedditUserLink(unparsedUrl, userName);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/walkthrough/TextSwitcherWithDistinctCheck.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.walkthrough;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.widget.TextSwitcher;
6 |
7 | public class TextSwitcherWithDistinctCheck extends TextSwitcher {
8 |
9 | private CharSequence prevText;
10 |
11 | public TextSwitcherWithDistinctCheck(Context context, AttributeSet attrs) {
12 | super(context, attrs);
13 | }
14 |
15 | @Override
16 | public void setText(CharSequence text) {
17 | if (text.equals(prevText)) {
18 | return;
19 | }
20 | prevText = text;
21 | super.setText(text);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/media/MediaFragmentCallbacks.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.media;
2 |
3 | import android.support.annotation.CheckResult;
4 |
5 | import net.dean.jraw.models.SubmissionPreview;
6 |
7 | import io.reactivex.Observable;
8 | import io.reactivex.Single;
9 | import me.saket.dank.utils.Optional;
10 |
11 | public interface MediaFragmentCallbacks {
12 |
13 | void toggleImmersiveMode();
14 |
15 | int getDeviceDisplayWidth();
16 |
17 | Single> getRedditSuppliedImages();
18 |
19 | @CheckResult
20 | Single optionButtonsHeight();
21 |
22 | @CheckResult
23 | Observable systemUiVisibilityStream();
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/events/UserPreferenceButtonClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 | import me.saket.dank.ui.preferences.adapter.UserPreferenceButton.ViewHolder;
5 |
6 | @AutoValue
7 | public abstract class UserPreferenceButtonClickEvent {
8 |
9 | public abstract UserPreferenceClickListener clickListener();
10 |
11 | public abstract ViewHolder itemViewHolder();
12 |
13 | public static UserPreferenceButtonClickEvent create(UserPreferenceClickListener clickListener, ViewHolder holder) {
14 | return new AutoValue_UserPreferenceButtonClickEvent(clickListener, holder);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/DraftStore.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission;
2 |
3 | import android.support.annotation.CheckResult;
4 |
5 | import net.dean.jraw.models.Identifiable;
6 |
7 | import io.reactivex.Completable;
8 | import io.reactivex.Observable;
9 | import io.reactivex.Single;
10 | import me.saket.dank.reply.DraftSaveResult;
11 |
12 | public interface DraftStore {
13 |
14 | @CheckResult
15 | Single saveDraft(Identifiable identifiable, String draftBody);
16 |
17 | @CheckResult
18 | Observable streamDrafts(Identifiable identifiable);
19 |
20 | @CheckResult
21 | Completable removeDraft(Identifiable identifiable);
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subscriptions/SubredditFlexboxLayoutManager.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.subscriptions;
2 |
3 | import android.content.Context;
4 |
5 | import com.google.android.flexbox.AlignItems;
6 | import com.google.android.flexbox.FlexDirection;
7 | import com.google.android.flexbox.FlexWrap;
8 | import com.google.android.flexbox.FlexboxLayoutManager;
9 |
10 | public class SubredditFlexboxLayoutManager extends FlexboxLayoutManager {
11 |
12 | public SubredditFlexboxLayoutManager(Context context) {
13 | super(context);
14 | setFlexDirection(FlexDirection.ROW);
15 | setFlexWrap(FlexWrap.WRAP);
16 | setAlignItems(AlignItems.STRETCH);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_adb_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/SubmissionChanged.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import net.dean.jraw.models.Submission;
6 |
7 | import me.saket.dank.ui.UiEvent;
8 | import me.saket.dank.ui.submission.SubmissionAndComments;
9 | import me.saket.dank.utils.Optional;
10 |
11 | @AutoValue
12 | public abstract class SubmissionChanged implements UiEvent {
13 |
14 | public abstract Optional optionalSubmission();
15 |
16 | public static SubmissionChanged create(Optional submission) {
17 | return new AutoValue_SubmissionChanged(submission);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 | build/
16 |
17 | # Gradle files
18 | .gradle/
19 | build/
20 |
21 | # Local configuration file (sdk path, etc)
22 | local.properties
23 |
24 | # Proguard folder generated by Eclipse
25 | proguard/
26 |
27 | # Log Files
28 | *.log
29 |
30 | # Android Studio stuff
31 | .idea/
32 | .navigation/
33 | captures/
34 | *.iml
35 |
36 | ### Android Patch ###
37 | gen-external-apklibs
38 |
39 | # OS specific ignores
40 | .DS_Store
41 | *~
42 | *.swp
43 |
44 | # Generated for release builds
45 | output.json
46 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/ReplyItemViewBindEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import android.widget.EditText;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | import me.saket.dank.ui.submission.adapter.SubmissionCommentInlineReply;
8 |
9 | @AutoValue
10 | public abstract class ReplyItemViewBindEvent {
11 |
12 | public abstract SubmissionCommentInlineReply.UiModel uiModel();
13 |
14 | public abstract EditText replyField();
15 |
16 | public static ReplyItemViewBindEvent create(SubmissionCommentInlineReply.UiModel uiModel, EditText replyField) {
17 | return new AutoValue_ReplyItemViewBindEvent(uiModel, replyField);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/markdown/markwon/MarkdownTextView.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils.markdown.markwon;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.AppCompatTextView;
5 | import android.util.AttributeSet;
6 |
7 | import ru.noties.markwon.Markwon;
8 |
9 | public class MarkdownTextView extends AppCompatTextView {
10 |
11 | public MarkdownTextView(Context context, AttributeSet attrs) {
12 | super(context, attrs);
13 | }
14 |
15 | @Override
16 | public void setText(CharSequence text, BufferType type) {
17 | Markwon.unscheduleTableRows(this);
18 | super.setText(text, type);
19 | Markwon.scheduleTableRows(this);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_subredditpicker_subreddit_options.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/ErrorState.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | import android.support.annotation.StringRes;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | @AutoValue
8 | public abstract class ErrorState {
9 |
10 | @StringRes
11 | public abstract int emojiRes();
12 |
13 | @StringRes
14 | public abstract int messageRes();
15 |
16 | public static ErrorState create(@StringRes int emojiRes, @StringRes int messageRes) {
17 | return new AutoValue_ErrorState(emojiRes, messageRes);
18 | }
19 |
20 | public static ErrorState from(ResolvedError resolvedError) {
21 | return create(resolvedError.errorEmojiRes(), resolvedError.errorMessageRes());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_network_wifi_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/FullNameType.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | public enum FullNameType {
4 | COMMENT("t1_"),
5 | ACCOUNT("t2_"),
6 | SUBMISSION("t3_"),
7 | MESSAGE("t4_"),
8 | SUBREDDIT("t5_"),
9 | AWARD("t6_"),
10 | UNKNOWN("poop");
11 |
12 | private final String prefix;
13 |
14 | FullNameType(String prefix) {
15 | this.prefix = prefix;
16 | }
17 |
18 | public static FullNameType parse(String fullName) {
19 | for (FullNameType type : FullNameType.values()) {
20 | if (fullName.startsWith(type.prefix)) {
21 | return type;
22 | }
23 | }
24 | return UNKNOWN;
25 | }
26 |
27 | public String prefix() {
28 | return prefix;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/SubmissionAndComments.kt:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission
2 |
3 | import com.squareup.moshi.JsonClass
4 | import me.saket.dank.utils.Optional
5 | import net.dean.jraw.models.Submission
6 | import net.dean.jraw.tree.RootCommentNode
7 |
8 | // TODO: Merge this with CachedSubmissionAndComments.
9 | @JsonClass(generateAdapter = true)
10 | data class SubmissionAndComments constructor(val submission: Submission, val comments: Optional = Optional.empty()) {
11 |
12 | companion object {
13 | fun from(tuple: CachedSubmissionAndComments): SubmissionAndComments {
14 | return SubmissionAndComments(tuple.submission, tuple.comments())
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/reply/ReplyDraft.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.reply;
2 |
3 | import com.google.auto.value.AutoValue;
4 | import com.squareup.moshi.JsonAdapter;
5 | import com.squareup.moshi.Moshi;
6 |
7 | @AutoValue
8 | public abstract class ReplyDraft {
9 |
10 | public abstract String body();
11 |
12 | /**
13 | * Only used for recycling old drafts.
14 | */
15 | abstract long createdTimeMillis();
16 |
17 | public static ReplyDraft create(String body, long createdTimeMillis) {
18 | return new AutoValue_ReplyDraft(body, createdTimeMillis);
19 | }
20 |
21 | public static JsonAdapter jsonAdapter(Moshi moshi) {
22 | return new AutoValue_ReplyDraft.MoshiJsonAdapter(moshi);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/submission/events/ReplySendClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.submission.events;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | import net.dean.jraw.models.Identifiable;
6 | import net.dean.jraw.models.PublicContribution;
7 |
8 | /**
9 | * Emitted when the send button is pressed in an inline comment reply.
10 | */
11 | @AutoValue
12 | public abstract class ReplySendClickEvent {
13 |
14 | public abstract Identifiable parentContribution();
15 |
16 | public abstract String replyBody();
17 |
18 | public static ReplySendClickEvent create(Identifiable parentContribution, String replyBody) {
19 | return new AutoValue_ReplySendClickEvent(parentContribution, replyBody);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_item_gesture_preference_section_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/swipe/SwipeActions.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.widgets.swipe;
2 |
3 | import com.google.auto.value.AutoValue;
4 |
5 | @AutoValue
6 | public abstract class SwipeActions {
7 |
8 | public abstract SwipeActionsHolder startActions();
9 |
10 | public abstract SwipeActionsHolder endActions();
11 |
12 | public static Builder builder() {
13 | return new AutoValue_SwipeActions.Builder();
14 | }
15 |
16 | @AutoValue.Builder
17 | public abstract static class Builder {
18 | public abstract Builder startActions(SwipeActionsHolder startActionsHolder);
19 |
20 | public abstract Builder endActions(SwipeActionsHolder endActionsHolder);
21 |
22 | public abstract SwipeActions build();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/adapter/UserPreferencesScreenUiModel.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences.adapter;
2 |
3 | import android.support.v7.widget.RecyclerView;
4 | import android.view.LayoutInflater;
5 | import android.view.ViewGroup;
6 |
7 | import java.util.List;
8 |
9 | public interface UserPreferencesScreenUiModel {
10 |
11 | enum Type {
12 | SECTION_HEADER,
13 | SWITCH,
14 | BUTTON
15 | }
16 |
17 | long adapterId();
18 |
19 | Type type();
20 |
21 | interface ChildAdapter {
22 | VH onCreateViewHolder(LayoutInflater inflater, ViewGroup parent);
23 |
24 | void onBindViewHolder(VH holder, T uiModel);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/RxPreferencesEnumTypeAdapter.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import com.f2prateek.rx.preferences2.Preference;
6 |
7 | public class RxPreferencesEnumTypeAdapter> implements Preference.Converter {
8 | private final Class enumClass;
9 |
10 | public RxPreferencesEnumTypeAdapter(Class enumClass) {
11 | this.enumClass = enumClass;
12 | }
13 |
14 | @NonNull
15 | @Override
16 | public T deserialize(@NonNull String serialized) {
17 | return T.valueOf(enumClass, serialized);
18 | }
19 |
20 | @NonNull
21 | @Override
22 | public String serialize(@NonNull T value) {
23 | return value.name();
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_volume_off_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_submission_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_compose_reply.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/subreddit/events/SubredditSubmissionClickEvent.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.subreddit.events;
2 |
3 | import android.view.View;
4 |
5 | import com.google.auto.value.AutoValue;
6 |
7 | import net.dean.jraw.models.Submission;
8 |
9 | import me.saket.dank.ui.UiEvent;
10 |
11 | @AutoValue
12 | public abstract class SubredditSubmissionClickEvent implements UiEvent {
13 |
14 | public abstract Submission submission();
15 |
16 | public abstract View itemView();
17 |
18 | public abstract long itemId();
19 |
20 | public static SubredditSubmissionClickEvent create(Submission submission, View itemView, long itemId) {
21 | return new AutoValue_SubredditSubmissionClickEvent(submission, itemView, itemId);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/utils/Dates.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.utils;
2 |
3 | import android.content.res.Resources;
4 | import android.text.format.DateUtils;
5 |
6 | import me.saket.dank.R;
7 |
8 | public class Dates extends DateUtils {
9 |
10 | /**
11 | * Because DateUtils.getRelativeTimeSpanString() does not support "just now".
12 | */
13 | public static CharSequence createTimestamp(Resources resources, long timeMillis) {
14 | if (System.currentTimeMillis() - timeMillis < MINUTE_IN_MILLIS) {
15 | return resources.getString(R.string.timestamp_just_now);
16 | } else {
17 | return getRelativeTimeSpanString(timeMillis, System.currentTimeMillis(), 0, FORMAT_ABBREV_RELATIVE | FORMAT_ABBREV_MONTH);
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/data/ActivityResult.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.data;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.support.annotation.Nullable;
6 |
7 | import com.google.auto.value.AutoValue;
8 |
9 | @AutoValue
10 | public abstract class ActivityResult {
11 |
12 | public abstract int requestCode();
13 |
14 | public abstract int resultCode();
15 |
16 | @Nullable
17 | public abstract Intent data();
18 |
19 | public boolean isResultOk() {
20 | return resultCode() == Activity.RESULT_OK;
21 | }
22 |
23 | public static ActivityResult create(int requestCode, int resultCode, @Nullable Intent data) {
24 | return new AutoValue_ActivityResult(requestCode, resultCode, data);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/urlparser/MediaLink.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.urlparser;
2 |
3 | /**
4 | * An image, GIF or a video. See implementations.
5 | */
6 | public abstract class MediaLink extends Link {
7 |
8 | public abstract String highQualityUrl();
9 |
10 | public abstract String lowQualityUrl();
11 |
12 | public abstract String cacheKey();
13 |
14 | public boolean isGif() {
15 | return UrlParser.isGifUrl(unparsedUrl());
16 | }
17 |
18 | public String cacheKeyWithClassName(String key) {
19 | String name = getClass().getSimpleName();
20 | String nameWithoutAutoValue = name.startsWith("AutoValue_")
21 | ? name.substring("AutoValue_".length())
22 | : name;
23 | return nameWithoutAutoValue + "_" + key;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/widgets/swipe/SwipeAction.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.widgets.swipe;
2 |
3 | import android.support.annotation.ColorRes;
4 | import android.support.annotation.StringRes;
5 |
6 | import com.google.auto.value.AutoValue;
7 |
8 | /**
9 | * Marks the release area for a swipe action.
10 | */
11 | @AutoValue
12 | public abstract class SwipeAction {
13 |
14 | @StringRes
15 | public abstract int labelRes();
16 |
17 | @ColorRes
18 | public abstract int backgroundColorRes();
19 |
20 | public abstract float layoutWeight();
21 |
22 | public static SwipeAction create(@StringRes int labelRes, @ColorRes int backgroundColorRes, float layoutWeight) {
23 | return new AutoValue_SwipeAction(labelRes, backgroundColorRes, layoutWeight);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_share_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_share_20dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_addlink_paste_from_clipboard_offer.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | -
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_look_and_feel_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/list_item_submission_comment_view_full_thread.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/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 | org.gradle.jvmargs=-Xmx2048m
13 |
14 | # When configured, Gradle will run in incubating parallel mode.
15 | # This option should only be used with decoupled projects. More details, visit
16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
17 | # org.gradle.parallel=true
18 |
19 | org.gradle.caching=true
20 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/dank/ui/preferences/gestures/GesturePreferenceUiModel.java:
--------------------------------------------------------------------------------
1 | package me.saket.dank.ui.preferences.gestures;
2 |
3 | import android.support.v7.widget.RecyclerView;
4 | import android.view.LayoutInflater;
5 | import android.view.ViewGroup;
6 |
7 | import java.util.List;
8 |
9 | public interface GesturePreferenceUiModel {
10 |
11 | enum Type {
12 | SUBMISSION_PREVIEW,
13 | SECTION_HEADER,
14 | SWIPE_ACTION,
15 | }
16 |
17 | long adapterId();
18 |
19 | Type type();
20 |
21 | interface ChildAdapter {
22 | VH onCreateViewHolder(LayoutInflater inflater, ViewGroup parent);
23 |
24 | void onBindViewHolder(VH holder, T uiModel);
25 |
26 | void onBindViewHolder(VH holder, T uiModel, List