├── .github
└── FUNDING.yml
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── telex
│ │ ├── App.kt
│ │ ├── analytics
│ │ └── FirebaseAnalyticsReporter.kt
│ │ ├── di
│ │ └── AppToolsModule.kt
│ │ ├── model
│ │ └── interactors
│ │ │ └── FirebaseRemoteConfigInteractor.kt
│ │ ├── review
│ │ └── InAppReviewManager.kt
│ │ └── utils
│ │ └── TimberTrees.kt
│ └── res
│ └── xml
│ └── remote_config_defaults.xml
├── base
├── build.gradle
└── src
│ ├── free
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── telex
│ │ │ └── base
│ │ │ └── presentation
│ │ │ ├── home
│ │ │ ├── DrawerNavigationDelegate.kt
│ │ │ ├── TopBannerDelegate.kt
│ │ │ └── UpgradeToProActivity.kt
│ │ │ └── page
│ │ │ ├── AddImageFromStorageDelegate.kt
│ │ │ └── options
│ │ │ └── PageOptionsDelegate.kt
│ └── res
│ │ ├── layout
│ │ ├── activity_upgrade_to_pro.xml
│ │ └── layout_upgrade_to_pro.xml
│ │ └── values
│ │ └── strings.xml
│ ├── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ └── privacy_policy.html
│ ├── ic_launcher-web.png
│ ├── java
│ │ └── com
│ │ │ └── telex
│ │ │ └── base
│ │ │ ├── BaseApp.kt
│ │ │ ├── analytics
│ │ │ ├── AnalyticsHelper.kt
│ │ │ ├── AnalyticsReporter.kt
│ │ │ └── DefaultAnalyticsReporter.kt
│ │ │ ├── di
│ │ │ ├── AppModule.kt
│ │ │ ├── AppToolsModule.kt
│ │ │ └── Scopes.kt
│ │ │ ├── exceptions
│ │ │ ├── NoNetworkConnectionException.kt
│ │ │ ├── ProxyConnectionException.kt
│ │ │ └── TelegraphUnavailableException.kt
│ │ │ ├── extention
│ │ │ ├── Extensions.kt
│ │ │ ├── OkHttpClientExtensions.kt
│ │ │ └── RxExtensions.kt
│ │ │ ├── model
│ │ │ ├── interactors
│ │ │ │ ├── DefaultRemoteConfigInteractor.kt
│ │ │ │ ├── PageInteractor.kt
│ │ │ │ ├── PageViewsInteractor.kt
│ │ │ │ ├── RemoteConfigInteractor.kt
│ │ │ │ └── UserInteractor.kt
│ │ │ ├── repository
│ │ │ │ ├── PageRepository.kt
│ │ │ │ ├── PageViewsRepository.kt
│ │ │ │ └── UserRepository.kt
│ │ │ ├── source
│ │ │ │ ├── local
│ │ │ │ │ ├── AppData.kt
│ │ │ │ │ ├── PageLocalDataSource.kt
│ │ │ │ │ ├── PagedData.kt.kt
│ │ │ │ │ ├── ProxyServer.kt
│ │ │ │ │ ├── RoomTypeConverters.kt
│ │ │ │ │ ├── TelegraphDatabase.kt
│ │ │ │ │ ├── UserLocalDataSource.kt
│ │ │ │ │ ├── dao
│ │ │ │ │ │ ├── PageDao.kt
│ │ │ │ │ │ └── UserDao.kt
│ │ │ │ │ └── entity
│ │ │ │ │ │ ├── Nodes.kt
│ │ │ │ │ │ ├── Page.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ └── remote
│ │ │ │ │ ├── PageRemoteDataSource.kt
│ │ │ │ │ ├── PageViewsRemoteDataSource.kt
│ │ │ │ │ ├── UserRemoteDataSource.kt
│ │ │ │ │ ├── api
│ │ │ │ │ ├── RestApi.kt
│ │ │ │ │ └── RestApiProvider.kt
│ │ │ │ │ ├── data
│ │ │ │ │ ├── ErrorData.kt
│ │ │ │ │ ├── ImageData.kt
│ │ │ │ │ ├── NodeElementData.kt
│ │ │ │ │ ├── PageData.kt
│ │ │ │ │ ├── PageListData.kt
│ │ │ │ │ ├── PageViewsData.kt
│ │ │ │ │ ├── ResponseData.kt
│ │ │ │ │ ├── TopBannerData.kt
│ │ │ │ │ └── UserData.kt
│ │ │ │ │ ├── interceptor
│ │ │ │ │ ├── AuthInterceptor.kt
│ │ │ │ │ ├── ErrorsInterceptor.kt
│ │ │ │ │ └── GlideInterceptor.kt
│ │ │ │ │ └── mapper
│ │ │ │ │ └── NodeElementJsonDeserializer.kt
│ │ │ └── system
│ │ │ │ ├── AppSchedulers.kt
│ │ │ │ ├── GlideModule.kt
│ │ │ │ ├── ResourceManager.kt
│ │ │ │ ├── SchedulersProvider.kt
│ │ │ │ └── ServerManager.kt
│ │ │ ├── presentation
│ │ │ ├── AppActivity.kt
│ │ │ ├── AppActivityPresenter.kt
│ │ │ ├── AppActivityView.kt
│ │ │ ├── base
│ │ │ │ ├── BaseActivity.kt
│ │ │ │ ├── BaseBottomSheetFragment.kt
│ │ │ │ ├── BaseDialogFragment.kt
│ │ │ │ ├── BaseFragment.kt
│ │ │ │ ├── BaseFrameLayout.kt
│ │ │ │ ├── BaseMvpView.kt
│ │ │ │ ├── BaseOnErrorConsumer.kt
│ │ │ │ ├── BaseOptionsFragment.kt
│ │ │ │ ├── BasePresenter.kt
│ │ │ │ ├── ErrorHandler.kt
│ │ │ │ ├── OnBackPressedListener.kt
│ │ │ │ └── UrlTextInputLayout.kt
│ │ │ ├── drawer
│ │ │ │ ├── BottomNavigationDrawerFragment.kt
│ │ │ │ ├── BottomNavigationDrawerPresenter.kt
│ │ │ │ └── BottomNavigationDrawerView.kt
│ │ │ ├── login
│ │ │ │ ├── ConfigureSupportedLinksDialogFragment.kt
│ │ │ │ └── LoginFragment.kt
│ │ │ ├── page
│ │ │ │ ├── BaseAddImageFromStorageDelegate.kt
│ │ │ │ ├── DraftFields.kt
│ │ │ │ ├── EditorMode.kt
│ │ │ │ ├── PageEditorFragment.kt
│ │ │ │ ├── PageEditorPresenter.kt
│ │ │ │ ├── PageEditorView.kt
│ │ │ │ ├── adapter
│ │ │ │ │ ├── BaseFormatViewHolder.kt
│ │ │ │ │ ├── FormatAdapter.kt
│ │ │ │ │ ├── FormatHorizontalRuleViewHolder.kt
│ │ │ │ │ ├── FormatImageItemMvpView.kt
│ │ │ │ │ ├── FormatImageItemPresenter.kt
│ │ │ │ │ ├── FormatImageItemView.kt
│ │ │ │ │ ├── FormatImageViewHolder.kt
│ │ │ │ │ ├── FormatMediaViewHolder.kt
│ │ │ │ │ ├── FormatTextViewHolder.kt
│ │ │ │ │ ├── ImageUploadStatus.kt
│ │ │ │ │ └── PageHeaderViewHolder.kt
│ │ │ │ ├── dialogs
│ │ │ │ │ ├── AddLinkDialogFragment.kt
│ │ │ │ │ ├── AuthorDialogFragment.kt
│ │ │ │ │ ├── AuthorDialogPresenter.kt
│ │ │ │ │ ├── AuthorView.kt
│ │ │ │ │ ├── InsertIframeDialogFragment.kt
│ │ │ │ │ └── InsertImageUrlCaptionDialogFragment.kt
│ │ │ │ ├── format
│ │ │ │ │ ├── Format.kt
│ │ │ │ │ ├── FormatType.kt
│ │ │ │ │ ├── ImageFormat.kt
│ │ │ │ │ ├── MediaFormat.kt
│ │ │ │ │ └── VideoFormat.kt
│ │ │ │ └── options
│ │ │ │ │ ├── BasePageOptionsDelegate.kt
│ │ │ │ │ ├── InsertImageOptionsFragment.kt
│ │ │ │ │ ├── PageOptionsFragment.kt
│ │ │ │ │ ├── PageOptionsPresenter.kt
│ │ │ │ │ ├── PageOptionsView.kt
│ │ │ │ │ └── blocks
│ │ │ │ │ ├── BlockMoreOptionsFragment.kt
│ │ │ │ │ ├── ImageBlockMoreOptionsFragment.kt
│ │ │ │ │ └── MediaBlockMoreOptionsFragment.kt
│ │ │ ├── pages
│ │ │ │ ├── BaseDrawerNavigationDelegate.kt
│ │ │ │ ├── BaseTopBannerDelegate.kt
│ │ │ │ ├── DraftsFragment.kt
│ │ │ │ ├── DraftsPresenter.kt
│ │ │ │ ├── DraftsView.kt
│ │ │ │ ├── PagesAdapter.kt
│ │ │ │ ├── PagesFragment.kt
│ │ │ │ ├── PagesPresenter.kt
│ │ │ │ └── PagesView.kt
│ │ │ ├── settings
│ │ │ │ ├── AboutAppFragment.kt
│ │ │ │ ├── PrivacyPolicyFragment.kt
│ │ │ │ ├── account
│ │ │ │ │ ├── AccountSettingsFragment.kt
│ │ │ │ │ ├── AccountSettingsOptionsFragment.kt
│ │ │ │ │ ├── AccountSettingsPresenter.kt
│ │ │ │ │ └── AccountSettingsView.kt
│ │ │ │ └── proxy
│ │ │ │ │ ├── ProxyServerFragment.kt
│ │ │ │ │ ├── ProxyServerOptionsFragment.kt
│ │ │ │ │ ├── ProxyServerPresenter.kt
│ │ │ │ │ └── ProxyServerView.kt
│ │ │ └── splash
│ │ │ │ ├── SplashActivity.kt
│ │ │ │ ├── SplashPresenter.kt
│ │ │ │ └── SplashView.kt
│ │ │ ├── review
│ │ │ ├── AppReviewManager.kt
│ │ │ └── DefaultAppReviewManager.kt
│ │ │ ├── ui
│ │ │ ├── ChipView.kt
│ │ │ └── FormatToggleButton.kt
│ │ │ └── utils
│ │ │ ├── CharacterCountErrorWatcher.kt
│ │ │ ├── Constants.kt
│ │ │ ├── DateUtils.kt
│ │ │ ├── ImagePickerHelper.kt
│ │ │ ├── PermissionsHelper.kt
│ │ │ ├── SpannableStringReplacer.java
│ │ │ ├── TelegraphContentConverter.kt
│ │ │ └── ViewUtils.kt
│ └── res
│ │ ├── anim
│ │ ├── item_animation_from_bottom.xml
│ │ ├── layout_animation_from_bottom.xml
│ │ ├── slide_down.xml
│ │ └── slide_up.xml
│ │ ├── animator
│ │ ├── fab_hide.xml
│ │ └── fab_show.xml
│ │ ├── color
│ │ └── btn_ripple_color.xml
│ │ ├── drawable-hdpi
│ │ ├── ic_account.png
│ │ ├── ic_add.png
│ │ ├── ic_arrow_back.png
│ │ ├── ic_block_text_subject.png
│ │ ├── ic_bug.png
│ │ ├── ic_chart.png
│ │ ├── ic_check_circle.png
│ │ ├── ic_close.png
│ │ ├── ic_code.png
│ │ ├── ic_copy.png
│ │ ├── ic_delete.png
│ │ ├── ic_discard.png
│ │ ├── ic_done.png
│ │ ├── ic_dropdown_arrow.png
│ │ ├── ic_duplicate.png
│ │ ├── ic_edit.png
│ │ ├── ic_exit.png
│ │ ├── ic_format_bold.png
│ │ ├── ic_format_heading.png
│ │ ├── ic_format_italic.png
│ │ ├── ic_format_list_bulleted.png
│ │ ├── ic_format_list_numbered.png
│ │ ├── ic_format_quote.png
│ │ ├── ic_format_strikethrough.png
│ │ ├── ic_format_subheading.png
│ │ ├── ic_format_underlined.png
│ │ ├── ic_gift.png
│ │ ├── ic_hidden.png
│ │ ├── ic_hide.png
│ │ ├── ic_image.png
│ │ ├── ic_info.png
│ │ ├── ic_insert_line.png
│ │ ├── ic_insert_link.png
│ │ ├── ic_menu.png
│ │ ├── ic_more.png
│ │ ├── ic_move_down.png
│ │ ├── ic_move_up.png
│ │ ├── ic_night_mode.png
│ │ ├── ic_open_in_app.png
│ │ ├── ic_privacy_policy.png
│ │ ├── ic_proxy.png
│ │ ├── ic_rate.png
│ │ ├── ic_redo.png
│ │ ├── ic_reset.png
│ │ ├── ic_settings.png
│ │ ├── ic_share.png
│ │ ├── ic_telegram.png
│ │ └── ic_undo.png
│ │ ├── drawable-mdpi
│ │ ├── ic_account.png
│ │ ├── ic_add.png
│ │ ├── ic_arrow_back.png
│ │ ├── ic_block_text_subject.png
│ │ ├── ic_bug.png
│ │ ├── ic_chart.png
│ │ ├── ic_check_circle.png
│ │ ├── ic_close.png
│ │ ├── ic_code.png
│ │ ├── ic_copy.png
│ │ ├── ic_delete.png
│ │ ├── ic_discard.png
│ │ ├── ic_done.png
│ │ ├── ic_dropdown_arrow.png
│ │ ├── ic_duplicate.png
│ │ ├── ic_edit.png
│ │ ├── ic_exit.png
│ │ ├── ic_format_bold.png
│ │ ├── ic_format_heading.png
│ │ ├── ic_format_italic.png
│ │ ├── ic_format_list_bulleted.png
│ │ ├── ic_format_list_numbered.png
│ │ ├── ic_format_quote.png
│ │ ├── ic_format_strikethrough.png
│ │ ├── ic_format_subheading.png
│ │ ├── ic_format_underlined.png
│ │ ├── ic_gift.png
│ │ ├── ic_hidden.png
│ │ ├── ic_hide.png
│ │ ├── ic_image.png
│ │ ├── ic_info.png
│ │ ├── ic_insert_line.png
│ │ ├── ic_insert_link.png
│ │ ├── ic_menu.png
│ │ ├── ic_more.png
│ │ ├── ic_move_down.png
│ │ ├── ic_move_up.png
│ │ ├── ic_night_mode.png
│ │ ├── ic_open_in_app.png
│ │ ├── ic_privacy_policy.png
│ │ ├── ic_proxy.png
│ │ ├── ic_rate.png
│ │ ├── ic_redo.png
│ │ ├── ic_reset.png
│ │ ├── ic_settings.png
│ │ ├── ic_share.png
│ │ ├── ic_telegram.png
│ │ └── ic_undo.png
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable-xhdpi
│ │ ├── ic_account.png
│ │ ├── ic_add.png
│ │ ├── ic_arrow_back.png
│ │ ├── ic_block_text_subject.png
│ │ ├── ic_bug.png
│ │ ├── ic_chart.png
│ │ ├── ic_check_circle.png
│ │ ├── ic_close.png
│ │ ├── ic_code.png
│ │ ├── ic_copy.png
│ │ ├── ic_delete.png
│ │ ├── ic_discard.png
│ │ ├── ic_done.png
│ │ ├── ic_dropdown_arrow.png
│ │ ├── ic_duplicate.png
│ │ ├── ic_edit.png
│ │ ├── ic_exit.png
│ │ ├── ic_format_bold.png
│ │ ├── ic_format_heading.png
│ │ ├── ic_format_italic.png
│ │ ├── ic_format_list_bulleted.png
│ │ ├── ic_format_list_numbered.png
│ │ ├── ic_format_quote.png
│ │ ├── ic_format_strikethrough.png
│ │ ├── ic_format_subheading.png
│ │ ├── ic_format_underlined.png
│ │ ├── ic_gift.png
│ │ ├── ic_hidden.png
│ │ ├── ic_hide.png
│ │ ├── ic_image.png
│ │ ├── ic_info.png
│ │ ├── ic_insert_line.png
│ │ ├── ic_insert_link.png
│ │ ├── ic_menu.png
│ │ ├── ic_more.png
│ │ ├── ic_move_down.png
│ │ ├── ic_move_up.png
│ │ ├── ic_night_mode.png
│ │ ├── ic_open_in_app.png
│ │ ├── ic_privacy_policy.png
│ │ ├── ic_proxy.png
│ │ ├── ic_rate.png
│ │ ├── ic_redo.png
│ │ ├── ic_reset.png
│ │ ├── ic_settings.png
│ │ ├── ic_share.png
│ │ ├── ic_telegram.png
│ │ └── ic_undo.png
│ │ ├── drawable-xxhdpi
│ │ ├── ic_account.png
│ │ ├── ic_add.png
│ │ ├── ic_arrow_back.png
│ │ ├── ic_block_text_subject.png
│ │ ├── ic_bug.png
│ │ ├── ic_chart.png
│ │ ├── ic_check_circle.png
│ │ ├── ic_close.png
│ │ ├── ic_code.png
│ │ ├── ic_copy.png
│ │ ├── ic_delete.png
│ │ ├── ic_discard.png
│ │ ├── ic_done.png
│ │ ├── ic_dropdown_arrow.png
│ │ ├── ic_duplicate.png
│ │ ├── ic_edit.png
│ │ ├── ic_exit.png
│ │ ├── ic_format_bold.png
│ │ ├── ic_format_heading.png
│ │ ├── ic_format_italic.png
│ │ ├── ic_format_list_bulleted.png
│ │ ├── ic_format_list_numbered.png
│ │ ├── ic_format_quote.png
│ │ ├── ic_format_strikethrough.png
│ │ ├── ic_format_subheading.png
│ │ ├── ic_format_underlined.png
│ │ ├── ic_gift.png
│ │ ├── ic_hidden.png
│ │ ├── ic_hide.png
│ │ ├── ic_image.png
│ │ ├── ic_info.png
│ │ ├── ic_insert_line.png
│ │ ├── ic_insert_link.png
│ │ ├── ic_menu.png
│ │ ├── ic_more.png
│ │ ├── ic_move_down.png
│ │ ├── ic_move_up.png
│ │ ├── ic_night_mode.png
│ │ ├── ic_open_in_app.png
│ │ ├── ic_privacy_policy.png
│ │ ├── ic_proxy.png
│ │ ├── ic_rate.png
│ │ ├── ic_redo.png
│ │ ├── ic_reset.png
│ │ ├── ic_settings.png
│ │ ├── ic_share.png
│ │ ├── ic_telegram.png
│ │ └── ic_undo.png
│ │ ├── drawable-xxxhdpi
│ │ ├── ic_account.png
│ │ ├── ic_add.png
│ │ ├── ic_arrow_back.png
│ │ ├── ic_arrow_down.png
│ │ ├── ic_block_text_subject.png
│ │ ├── ic_bug.png
│ │ ├── ic_chart.png
│ │ ├── ic_check_circle.png
│ │ ├── ic_close.png
│ │ ├── ic_close_circle.png
│ │ ├── ic_code.png
│ │ ├── ic_copy.png
│ │ ├── ic_delete.png
│ │ ├── ic_discard.png
│ │ ├── ic_done.png
│ │ ├── ic_dropdown_arrow.png
│ │ ├── ic_duplicate.png
│ │ ├── ic_edit.png
│ │ ├── ic_exit.png
│ │ ├── ic_format_bold.png
│ │ ├── ic_format_heading.png
│ │ ├── ic_format_italic.png
│ │ ├── ic_format_list_bulleted.png
│ │ ├── ic_format_list_numbered.png
│ │ ├── ic_format_quote.png
│ │ ├── ic_format_strikethrough.png
│ │ ├── ic_format_subheading.png
│ │ ├── ic_format_underlined.png
│ │ ├── ic_gift.png
│ │ ├── ic_hidden.png
│ │ ├── ic_hide.png
│ │ ├── ic_image.png
│ │ ├── ic_info.png
│ │ ├── ic_insert_line.png
│ │ ├── ic_insert_link.png
│ │ ├── ic_menu.png
│ │ ├── ic_more.png
│ │ ├── ic_move_down.png
│ │ ├── ic_move_up.png
│ │ ├── ic_night_mode.png
│ │ ├── ic_open_in_app.png
│ │ ├── ic_privacy_policy.png
│ │ ├── ic_proxy.png
│ │ ├── ic_rate.png
│ │ ├── ic_redo.png
│ │ ├── ic_reset.png
│ │ ├── ic_settings.png
│ │ ├── ic_share.png
│ │ ├── ic_telegram.png
│ │ └── ic_undo.png
│ │ ├── drawable
│ │ ├── background_chart_marker.xml
│ │ ├── background_chip.xml
│ │ ├── background_format_more_overlay.xml
│ │ ├── background_hr.xml
│ │ ├── bottom_app_bar_title_foreground.xml
│ │ ├── button_format.xml
│ │ ├── button_format_shape.xml
│ │ ├── button_format_shape_checked.xml
│ │ ├── ic_launcher.png
│ │ ├── ic_views.xml
│ │ ├── ic_write.xml
│ │ ├── item_divider.xml
│ │ └── splash.xml
│ │ ├── font
│ │ ├── roboto.xml
│ │ ├── roboto_bold.xml
│ │ ├── roboto_medium.xml
│ │ └── roboto_semibold.xml
│ │ ├── layout
│ │ ├── activity_app.xml
│ │ ├── activity_splash.xml
│ │ ├── dialog_add_link.xml
│ │ ├── dialog_author.xml
│ │ ├── dialog_iframe.xml
│ │ ├── dialog_image_url_caption.xml
│ │ ├── dialog_progress.xml
│ │ ├── fragment_about.xml
│ │ ├── fragment_account_settings.xml
│ │ ├── fragment_bottom_navigation_drawer.xml
│ │ ├── fragment_bottom_sheet_options.xml
│ │ ├── fragment_drafts.xml
│ │ ├── fragment_login.xml
│ │ ├── fragment_page_editor.xml
│ │ ├── fragment_pages.xml
│ │ ├── fragment_privacy_policy.xml
│ │ ├── fragment_proxy_server.xml
│ │ ├── item_add_account.xml
│ │ ├── item_footer_progress.xml
│ │ ├── item_format_aside.xml
│ │ ├── item_format_heading.xml
│ │ ├── item_format_horizontal_rule.xml
│ │ ├── item_format_image.xml
│ │ ├── item_format_media.xml
│ │ ├── item_format_preformat.xml
│ │ ├── item_format_quote.xml
│ │ ├── item_format_text.xml
│ │ ├── item_page.xml
│ │ ├── item_page_header.xml
│ │ ├── layout_chip.xml
│ │ ├── layout_drawer_header.xml
│ │ ├── layout_editor_toolbar.xml
│ │ ├── layout_format_toogle_button.xml
│ │ ├── layout_item_format_more.xml
│ │ ├── layout_item_format_more_overlay.xml
│ │ ├── layout_no_stories.xml
│ │ ├── layout_top_banner.xml
│ │ ├── layout_unauthorized.xml
│ │ ├── menu_item_drafts.xml
│ │ └── menu_item_switch.xml
│ │ ├── menu
│ │ └── menu_drawer.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── navigation
│ │ └── navigation_graph.xml
│ │ ├── values-de
│ │ └── strings.xml
│ │ ├── values-es
│ │ └── strings.xml
│ │ ├── values-he
│ │ └── strings.xml
│ │ ├── values-it
│ │ └── strings.xml
│ │ ├── values-iw
│ │ └── strings.xml
│ │ ├── values-night
│ │ ├── color.xml
│ │ └── styles.xml
│ │ ├── values-ru
│ │ └── strings.xml
│ │ ├── values-tr
│ │ └── strings.xml
│ │ ├── values-uk
│ │ └── strings.xml
│ │ ├── values-v21
│ │ └── styles.xml
│ │ ├── values-v23
│ │ └── styles.xml
│ │ └── values
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── font_certs.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── motion.xml
│ │ ├── preloaded_fonts.xml
│ │ ├── strings.xml
│ │ ├── styles.xml
│ │ └── type.xml
│ └── pro
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── telex
│ │ └── base
│ │ └── presentation
│ │ ├── home
│ │ ├── AddAccountDialogFragment.kt
│ │ ├── DrawerNavigationDelegate.kt
│ │ └── TopBannerDelegate.kt
│ │ ├── page
│ │ ├── AddImageFromStorageDelegate.kt
│ │ └── options
│ │ │ └── PageOptionsDelegate.kt
│ │ └── statistics
│ │ ├── ChartMarkerView.kt
│ │ ├── PageStatisticsActivity.kt
│ │ ├── PageStatisticsPresenter.kt
│ │ ├── PageStatisticsView.kt
│ │ ├── StatisticsPeriodOptionsFragment.kt
│ │ └── StatisticsType.kt
│ └── res
│ ├── layout
│ ├── activity_page_statistics.xml
│ ├── item_account.xml
│ └── layout_chart_marker.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ └── values
│ └── strings.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── ktlint.gradle
├── sandbox
├── .gitignore
├── build.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── telex
│ └── App.kt
├── screenshots
├── demo.gif
├── night_mode.png
└── stats.gif
└── settings.gradle
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: telegraphx
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: ["https://play.google.com/store/apps/details?id=com.telex.pro"]
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | /keystore
10 | *.jks
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "editor"]
2 | path = editor
3 | url = https://github.com/sergpetrov/AztecEditor-Android.git
4 | branch = develop_telex
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Telegraph X
2 | Telegraph X is Android client for Telegra.ph minimalist publishing tool (made by Telegram team) that allows you to create and manage publications. More information about Telegra.ph can be found [here](https://telegram.org/blog/telegraph).
3 |
4 | **[Install on Google Play](https://play.google.com/store/apps/details?id=com.telex)**
5 |
6 | ## Main features
7 |
8 | * create / edit / delete publications
9 |
10 | * auth and sync using [telegram bot](https://telegram.me/telegraph)
11 |
12 | * rich building blocks like text, quote, heading, ordered/numbered list, image and etc.
13 |
14 | * drafts with changes autosaving
15 |
16 | * multiple accounts support
17 |
18 | * publication views stats
19 |
20 | * night mode
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ## Contribution
29 |
30 | Welcome to contribution if you are developer and you want improve app / add a new feature or if you are student and you want to get a development experience.
31 |
32 | [Information for contributors](https://github.com/sergpetrov/telegraph-android/wiki/Information-for-contributors)
33 |
34 | \
35 | \
36 | Join the [telegram channel](https://t.me/telegra_ph_x) and you’ll be aware of news, updates, changes and new features.
37 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /build
5 | /.idea/
6 | google-services.json
--------------------------------------------------------------------------------
/app/src/main/java/com/telex/App.kt:
--------------------------------------------------------------------------------
1 | package com.telex
2 |
3 | import com.telex.base.BaseApp
4 | import com.telex.base.di.AppModule
5 | import com.telex.base.di.Scopes
6 | import com.telex.base.utils.Constants
7 | import com.telex.di.AppToolsModule
8 | import com.telex.utils.DebugTree
9 | import com.telex.utils.ReleaseTree
10 | import timber.log.Timber
11 | import toothpick.Scope
12 | import toothpick.Toothpick
13 |
14 | /**
15 | * @author Sergey Petrov
16 | */
17 | class App : BaseApp() {
18 |
19 | override fun buildToothpickScope(): Scope? {
20 | val scope = Toothpick.openScope(Scopes.App)
21 | scope.installModules(
22 | AppModule(this),
23 | AppToolsModule(this)
24 | )
25 | return scope
26 | }
27 |
28 | override fun setupTimber() {
29 | if (Constants.isRelease()) {
30 | Timber.plant(ReleaseTree())
31 | } else {
32 | Timber.plant(DebugTree())
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/com/telex/analytics/FirebaseAnalyticsReporter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.analytics
2 |
3 | import android.os.Bundle
4 | import com.google.firebase.analytics.ktx.analytics
5 | import com.google.firebase.ktx.Firebase
6 | import com.telex.base.analytics.AnalyticsReporter
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | class FirebaseAnalyticsReporter : AnalyticsReporter {
12 |
13 | private val firebaseAnalytics = Firebase.analytics
14 |
15 | override fun logEvent(eventKey: String) {
16 | firebaseAnalytics.logEvent(eventKey, Bundle())
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/telex/di/AppToolsModule.kt:
--------------------------------------------------------------------------------
1 | package com.telex.di
2 |
3 | import android.content.Context
4 | import com.telex.analytics.FirebaseAnalyticsReporter
5 | import com.telex.base.analytics.AnalyticsReporter
6 | import com.telex.base.model.interactors.RemoteConfigInteractor
7 | import com.telex.base.model.source.local.AppData
8 | import com.telex.base.review.AppReviewManager
9 | import com.telex.model.interactors.FirebaseRemoteConfigInteractor
10 | import com.telex.review.InAppReviewManager
11 | import toothpick.config.Module
12 |
13 | class AppToolsModule(context: Context) : Module() {
14 | init {
15 | val appData = AppData(context)
16 | bind(AppData::class.java).toInstance(appData)
17 |
18 | val analyticsReporter = FirebaseAnalyticsReporter()
19 | bind(AnalyticsReporter::class.java).toInstance(analyticsReporter)
20 | bind(RemoteConfigInteractor::class.java).toInstance(FirebaseRemoteConfigInteractor())
21 |
22 | val appReviewManager = InAppReviewManager(context, appData)
23 | bind(AppReviewManager::class.java).toInstance(appReviewManager)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/remote_config_defaults.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | top_banner
5 | null
6 |
7 |
8 | created_with_caption_disabled
9 | true
10 |
11 |
--------------------------------------------------------------------------------
/base/src/free/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/base/src/free/java/com/telex/base/presentation/home/TopBannerDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.home
2 |
3 | import android.content.Intent
4 | import com.telex.base.model.source.remote.data.TopBannerData
5 | import com.telex.base.presentation.pages.BaseTopBannerDelegate
6 | import com.telex.base.presentation.pages.PagesFragment
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | class TopBannerDelegate(
12 | fragment: PagesFragment?,
13 | banner: TopBannerData
14 | ) : BaseTopBannerDelegate(fragment, banner) {
15 |
16 | override val enabled: Boolean
17 | get() = !banner.disabled
18 |
19 | override fun showDefaultOnSecondActionClicked() {
20 | fragment?.activity?.apply {
21 | startActivity(Intent(this, UpgradeToProActivity::class.java))
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/base/src/free/java/com/telex/base/presentation/home/UpgradeToProActivity.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.home
2 |
3 | import android.os.Bundle
4 | import com.telex.base.R
5 | import com.telex.base.extention.applySystemWindowInsetsPadding
6 | import com.telex.base.presentation.base.BaseActivity
7 | import com.telex.base.utils.ViewUtils
8 | import kotlinx.android.synthetic.free.activity_upgrade_to_pro.*
9 | import kotlinx.android.synthetic.free.activity_upgrade_to_pro.closeImageView
10 |
11 | /**
12 | * @author Sergey Petrov
13 | */
14 | class UpgradeToProActivity : BaseActivity() {
15 |
16 | override val layoutRes: Int = R.layout.activity_upgrade_to_pro
17 |
18 | override fun onCreate(savedInstanceState: Bundle?) {
19 | super.onCreate(savedInstanceState)
20 |
21 | setupStatusBar()
22 | rootLayout.applySystemWindowInsetsPadding(applyTop = true, applyBottom = true)
23 | closeImageView.setOnClickListener { finish() }
24 | installProButton.setOnClickListener {
25 | ViewUtils.openPro(this)
26 | finish()
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/base/src/free/java/com/telex/base/presentation/page/options/PageOptionsDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options
2 |
3 | import android.content.Context
4 | import android.content.Intent
5 | import com.telex.base.presentation.home.UpgradeToProActivity
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class PageOptionsDelegate(
11 | override val context: Context,
12 | override val pagePath: String
13 | ) : BasePageOptionsDelegate(context, pagePath) {
14 |
15 | override fun openPageStatistics() {
16 | context.startActivity(Intent(context, UpgradeToProActivity::class.java))
17 | }
18 |
19 | override fun deletePost(onDeleteClick: () -> Unit) {
20 | context.startActivity(Intent(context, UpgradeToProActivity::class.java))
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/base/src/free/res/layout/layout_upgrade_to_pro.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/base/src/free/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | "Telegraph X"
4 | "https://play.google.com/store/apps/details?id=com.telex"
5 |
6 |
--------------------------------------------------------------------------------
/base/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/analytics/AnalyticsReporter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.analytics
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | interface AnalyticsReporter {
7 | fun logEvent(eventKey: String)
8 | }
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/analytics/DefaultAnalyticsReporter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.analytics
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | class DefaultAnalyticsReporter : AnalyticsReporter {
7 | override fun logEvent(eventKey: String) {
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/di/AppModule.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.di
2 |
3 | import android.content.Context
4 | import android.content.res.Resources
5 | import com.telex.base.model.source.local.TelegraphDatabase
6 | import com.telex.base.model.source.remote.api.RestApiProvider
7 | import com.telex.base.model.system.ServerManager
8 | import id.zelory.compressor.Compressor
9 | import toothpick.config.Module
10 |
11 | class AppModule(context: Context) : Module() {
12 | init {
13 | bind(Context::class.java).toInstance(context)
14 | bind(Resources::class.java).toInstance(context.resources)
15 | bind(ServerManager::class.java).singleton()
16 | bind(RestApiProvider::class.java).singleton()
17 | bind(TelegraphDatabase::class.java).toInstance(TelegraphDatabase.getInstance(context))
18 | bind(Compressor::class.java).toInstance(Compressor(context))
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/di/AppToolsModule.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.di
2 |
3 | import android.content.Context
4 | import com.telex.base.analytics.AnalyticsReporter
5 | import com.telex.base.analytics.DefaultAnalyticsReporter
6 | import com.telex.base.model.interactors.DefaultRemoteConfigInteractor
7 | import com.telex.base.model.interactors.RemoteConfigInteractor
8 | import com.telex.base.model.source.local.AppData
9 | import com.telex.base.review.AppReviewManager
10 | import com.telex.base.review.DefaultAppReviewManager
11 | import toothpick.config.Module
12 |
13 | class AppToolsModule(context: Context) : Module() {
14 | init {
15 | val appData = AppData(context)
16 | bind(AppData::class.java).toInstance(appData)
17 |
18 | bind(AnalyticsReporter::class.java).toInstance(DefaultAnalyticsReporter())
19 | bind(RemoteConfigInteractor::class.java).toInstance(DefaultRemoteConfigInteractor())
20 | bind(AppReviewManager::class.java).toInstance(DefaultAppReviewManager())
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/di/Scopes.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.di
2 |
3 | object Scopes {
4 | const val App = "App"
5 | const val User = "User"
6 | }
7 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/exceptions/NoNetworkConnectionException.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.exceptions
2 |
3 | import java.io.IOException
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | class NoNetworkConnectionException : IOException()
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/exceptions/ProxyConnectionException.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.exceptions
2 |
3 | import java.io.IOException
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | class ProxyConnectionException : IOException()
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/exceptions/TelegraphUnavailableException.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.exceptions
2 |
3 | import java.io.IOException
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | class TelegraphUnavailableException : IOException()
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/interactors/DefaultRemoteConfigInteractor.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.interactors
2 |
3 | import com.telex.base.model.source.remote.data.TopBannerData
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | class DefaultRemoteConfigInteractor : RemoteConfigInteractor {
9 |
10 | override fun fetch(onCompleted: () -> Unit) {
11 | }
12 |
13 | override fun getTopBanner(): TopBannerData? {
14 | return null
15 | }
16 |
17 | override fun createdWithCaptionDisabled(): Boolean {
18 | return true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/interactors/RemoteConfigInteractor.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.interactors
2 |
3 | import com.telex.base.model.source.remote.data.TopBannerData
4 | import java.util.concurrent.TimeUnit
5 |
6 | /**
7 | * @author Sergey Petrov
8 | */
9 | interface RemoteConfigInteractor {
10 | fun fetch(onCompleted: () -> Unit)
11 | fun getTopBanner(): TopBannerData?
12 | fun createdWithCaptionDisabled(): Boolean
13 |
14 | companion object {
15 | val MINIMUM_FETCH_INTERVAL_IN_SECONDS = TimeUnit.HOURS.toSeconds(12)
16 | const val TOP_BANNER = "top_banner"
17 | const val CREATED_WITH_CAPTION_DISABLED = "created_with_caption_disabled"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/repository/PageViewsRepository.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.repository
2 |
3 | import com.telex.base.model.source.remote.PageViewsRemoteDataSource
4 | import io.reactivex.Single
5 | import javax.inject.Inject
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class PageViewsRepository @Inject constructor(
11 | private val pageViewsRemoteDataSource: PageViewsRemoteDataSource
12 | ) {
13 |
14 | fun getPageViewsForYear(path: String, year: Int): Single {
15 | return pageViewsRemoteDataSource.getPageViews(path, year, month = null, day = null)
16 | .map { result -> result.views }
17 | }
18 |
19 | fun getPageViewsForMonth(path: String, year: Int, month: Int): Single {
20 | return pageViewsRemoteDataSource.getPageViews(path, year, month, day = null)
21 | .map { result -> result.views }
22 | }
23 |
24 | fun getPageViewsForDay(path: String, year: Int, month: Int, day: Int): Single {
25 | return pageViewsRemoteDataSource.getPageViews(path, year, month, day)
26 | .map { result -> result.views }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/PageLocalDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local
2 |
3 | import com.telex.base.model.source.local.entity.Page
4 | import javax.inject.Inject
5 |
6 | /**
7 | * @author Sergey Petrov
8 | */
9 | class PageLocalDataSource @Inject constructor(database: TelegraphDatabase) {
10 | private var pageDao = database.pageDao()
11 |
12 | fun getPages(userId: String) = pageDao.getPages(userId)
13 |
14 | fun observePages(userId: String) = pageDao.observePages(userId)
15 |
16 | fun observeDraftPages() = pageDao.observeDraftPages()
17 |
18 | fun observeNumberOfDrafts() = pageDao.observeNumberOfDrafts()
19 |
20 | fun getPage(path: String) = pageDao.getPage(path)
21 |
22 | fun getPage(id: Long) = pageDao.getPage(id)
23 |
24 | fun insert(pages: List) = pageDao.insert(pages)
25 |
26 | fun update(pages: List) = pageDao.update(pages)
27 |
28 | fun update(page: Page) = pageDao.update(page)
29 |
30 | fun insert(page: Page) = pageDao.insert(page)
31 |
32 | fun clearExceptDrafts(userId: String) = pageDao.clearExceptDrafts(userId)
33 |
34 | fun clear() = pageDao.clear()
35 |
36 | fun delete(pageId: Long) {
37 | pageDao.delete(pageId)
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/PagedData.kt.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class PagedData(val total: Int, val items: List)
7 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/ProxyServer.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class ProxyServer(
7 | val type: Type,
8 | val host: String,
9 | val port: Int,
10 | val user: String?,
11 | val password: String?,
12 | var enabled: Boolean
13 | ) {
14 | enum class Type { HTTP, SOCKS }
15 | }
16 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/UserLocalDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local
2 |
3 | import com.telex.base.model.source.local.dao.UserDao
4 | import com.telex.base.model.source.local.entity.User
5 | import javax.inject.Inject
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class UserLocalDataSource @Inject constructor(database: TelegraphDatabase) {
11 |
12 | private var userDao: UserDao = database.userDao()
13 |
14 | fun getFirstUser() = userDao.getFirstUser()
15 |
16 | fun getUserByAccountName(accountName: String) = userDao.getUserByAccountName(accountName)
17 |
18 | fun observeUser(id: String) = userDao.observeUser(id)
19 |
20 | fun observeAllUsers() = userDao.observeAllUsers()
21 |
22 | fun save(user: User) = userDao.save(user)
23 |
24 | fun clear() = userDao.clear()
25 |
26 | fun delete(id: String) = userDao.delete(id)
27 | }
28 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/dao/UserDao.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local.dao
2 |
3 | import androidx.room.Dao
4 | import androidx.room.Insert
5 | import androidx.room.OnConflictStrategy
6 | import androidx.room.Query
7 | import com.telex.base.model.source.local.entity.User
8 | import io.reactivex.Flowable
9 | import io.reactivex.Maybe
10 |
11 | /**
12 | * @author Sergey Petrov
13 | */
14 | @Dao
15 | interface UserDao {
16 |
17 | @Query("SELECT * FROM User ORDER BY accountName LIMIT 1")
18 | fun getFirstUser(): Maybe
19 |
20 | @Query("SELECT * FROM User WHERE accountName=:accountName LIMIT 1")
21 | fun getUserByAccountName(accountName: String): User?
22 |
23 | @Query("SELECT * FROM User WHERE id=:id LIMIT 1")
24 | fun observeUser(id: String): Flowable
25 |
26 | @Query("SELECT * FROM User")
27 | fun observeAllUsers(): Flowable>
28 |
29 | @Insert(onConflict = OnConflictStrategy.REPLACE)
30 | fun save(user: User)
31 |
32 | @Query("DELETE FROM User")
33 | fun clear()
34 |
35 | @Query("DELETE FROM User WHERE id=:id")
36 | fun delete(id: String)
37 | }
38 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/entity/Nodes.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local.entity
2 |
3 | import com.telex.base.model.source.remote.data.NodeElementData
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | data class Nodes(val content: List)
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/local/entity/User.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.local.entity
2 |
3 | import androidx.room.Entity
4 | import androidx.room.PrimaryKey
5 |
6 | /**
7 | * @author Sergey Petrov
8 | */
9 | @Entity
10 | data class User(
11 | @PrimaryKey
12 | var id: String, // accessToken
13 | var accountName: String,
14 | var authorName: String,
15 | var authorUrl: String?,
16 | var pageCount: Int = 0
17 | )
18 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/PageViewsRemoteDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote
2 |
3 | import com.telex.base.model.source.remote.api.RestApiProvider
4 | import com.telex.base.model.source.remote.data.PageViewsData
5 | import io.reactivex.Single
6 | import javax.inject.Inject
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | class PageViewsRemoteDataSource @Inject constructor(
12 | private val apiProvider: RestApiProvider
13 | ) {
14 |
15 | fun getPageViews(path: String, year: Int, month: Int?, day: Int?): Single {
16 | return apiProvider.getRestApi()
17 | .getPageViews(path, year, month, day)
18 | .map { response -> response.result }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/UserRemoteDataSource.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote
2 |
3 | import com.telex.base.model.source.remote.api.RestApiProvider
4 | import com.telex.base.model.source.remote.data.UserData
5 | import io.reactivex.Completable
6 | import io.reactivex.Single
7 | import javax.inject.Inject
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | class UserRemoteDataSource @Inject constructor(private val apiProvider: RestApiProvider) {
13 |
14 | fun getAccountInfo(): Single = apiProvider.getRestApi().getAccountInfo()
15 | .map { r -> r.result }
16 |
17 | fun editAccountInfo(shortName: String, authorName: String?, authorUrl: String?) =
18 | apiProvider.getRestApi().editAccountInfo(shortName, authorName, authorUrl)
19 | .map { r -> r.result }
20 |
21 | fun login(oauthUrl: String): Completable = apiProvider.getRestApi().login(oauthUrl).ignoreElement()
22 |
23 | fun resetSessions() = apiProvider.getRestApi().revokeAccessToken()
24 | }
25 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/ErrorData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class ErrorData(val error: String)
7 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/ImageData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class ImageData(val src: String)
7 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/NodeElementData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class NodeElementData(
7 | var tag: String? = null,
8 | var attrs: MutableMap? = mutableMapOf(),
9 | var children: ArrayList? = arrayListOf(),
10 | var text: String? = null
11 | )
12 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/PageData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | data class PageData(
9 | @Transient
10 | var number: Int?,
11 |
12 | val path: String,
13 | val url: String,
14 | val title: String,
15 | val description: String,
16 | @SerializedName("author_name")
17 | val authorName: String,
18 | @SerializedName("author_url")
19 | val authorUrl: String,
20 | @SerializedName("image_url")
21 | val imageUrl: String?,
22 | val content: List?,
23 | val views: Int = 0,
24 | @SerializedName("can_edit")
25 | val canEdit: Boolean
26 | )
27 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/PageListData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | data class PageListData(
9 | @SerializedName("total_count")
10 | val totalCount: Int,
11 | val pages: List
12 | )
13 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/PageViewsData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class PageViewsData(val views: Int)
7 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/ResponseData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class ResponseData(val result: T)
7 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/TopBannerData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | data class TopBannerData(
7 | val disabled: Boolean,
8 | val showForPro: Boolean,
9 | val message: String,
10 | val firstAction: ActionData?,
11 | val secondAction: ActionData?
12 | ) {
13 | data class ActionData(
14 | val title: String,
15 | val url: String?
16 | )
17 | }
18 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/data/UserData.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.data
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | data class UserData(
9 | @SerializedName("short_name")
10 | val accountName: String,
11 | @SerializedName("author_name")
12 | val authorName: String,
13 | @SerializedName("author_url")
14 | val authorUrl: String?,
15 | @SerializedName("access_token")
16 | val accessToken: String?,
17 | @SerializedName("auth_url")
18 | val authUrl: String?,
19 | @SerializedName("page_count")
20 | val pageCount: Int = 0
21 | )
22 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/interceptor/AuthInterceptor.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.interceptor
2 |
3 | import com.telex.base.model.source.local.AppData
4 | import okhttp3.Interceptor
5 | import okhttp3.Response
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class AuthInterceptor(private val appData: AppData) : Interceptor {
11 | val HEADER_SET_COOKIE = "Set-Cookie"
12 |
13 | override fun intercept(chain: Interceptor.Chain): Response {
14 | var request = chain.request()
15 | appData.getCurrentAccessToken()?.let {
16 | val url = request.url().newBuilder()
17 | .addEncodedQueryParameter("access_token", appData.getCurrentAccessToken())
18 | .build()
19 |
20 | request = chain.request().newBuilder()
21 | .url(url).build()
22 | }
23 |
24 | val response = chain.proceed(request)
25 |
26 | val cookies = response.headers(HEADER_SET_COOKIE)
27 | if (cookies.isNotEmpty() && cookies.size > 1) {
28 | val accessToken = cookies[1].split(";")[0].split("=")[1]
29 | appData.putCurrentAccessToken(accessToken)
30 | }
31 | return response
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/source/remote/interceptor/GlideInterceptor.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.source.remote.interceptor
2 |
3 | import com.telex.base.model.system.ServerManager
4 | import com.telex.base.utils.ServerConfig
5 | import okhttp3.Interceptor
6 | import okhttp3.Response
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | class GlideInterceptor(private val serverManager: ServerManager) : Interceptor {
12 |
13 | override fun intercept(chain: Interceptor.Chain): Response {
14 | var request = chain.request()
15 | if ((request.url().host() == ServerConfig.Telegraph.server) &&
16 | !serverManager.isUserProxyServerEnabled() &&
17 | serverManager.getCurrentServerConfig() != ServerConfig.Telegraph
18 | ) {
19 | request = request
20 | .newBuilder()
21 | .url(request.url().toString().replace(ServerConfig.Telegraph.server, serverManager.getCurrentServerConfig().server))
22 | .build()
23 | }
24 | return chain.proceed(request)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/system/AppSchedulers.kt:
--------------------------------------------------------------------------------
1 | package ru.marussia.app.model.system
2 |
3 | import io.reactivex.android.schedulers.AndroidSchedulers
4 | import io.reactivex.schedulers.Schedulers
5 |
6 | /**
7 | * @author Sergey Petrov
8 | */
9 | class AppSchedulers : SchedulersProvider {
10 | override fun ui() = AndroidSchedulers.mainThread()
11 | override fun computation() = Schedulers.computation()
12 | override fun trampoline() = Schedulers.trampoline()
13 | override fun newThread() = Schedulers.newThread()
14 | override fun io() = Schedulers.io()
15 | }
16 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/system/GlideModule.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.model.system
2 |
3 | import android.content.Context
4 | import com.bumptech.glide.Glide
5 | import com.bumptech.glide.Registry
6 | import com.bumptech.glide.annotation.Excludes
7 | import com.bumptech.glide.annotation.GlideModule
8 | import com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlideModule
9 | import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader
10 | import com.bumptech.glide.load.model.GlideUrl
11 | import com.bumptech.glide.module.AppGlideModule
12 | import com.telex.base.di.Scopes
13 | import java.io.InputStream
14 | import toothpick.Toothpick
15 |
16 | @Excludes(OkHttpLibraryGlideModule::class)
17 | @GlideModule
18 | class GlideModule : AppGlideModule() {
19 |
20 | private val serverManager: ServerManager by lazy {
21 | Toothpick.openScope(Scopes.App)
22 | .getInstance(ServerManager::class.java)
23 | }
24 |
25 | override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
26 | val factory = OkHttpUrlLoader.Factory(serverManager.getGlideOkHttpClient())
27 | glide.registry.replace(GlideUrl::class.java, InputStream::class.java, factory)
28 | }
29 |
30 | override fun isManifestParsingEnabled() = false
31 | }
32 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/system/ResourceManager.kt:
--------------------------------------------------------------------------------
1 | package ru.marussia.app.model.system
2 |
3 | import android.content.Context
4 | import javax.inject.Inject
5 |
6 | /**
7 | * @author Sergey Petrov
8 | */
9 | class ResourceManager @Inject constructor(private val context: Context) {
10 |
11 | fun getString(id: Int) = context.getString(id)
12 | }
13 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/model/system/SchedulersProvider.kt:
--------------------------------------------------------------------------------
1 | package ru.marussia.app.model.system
2 |
3 | import io.reactivex.Scheduler
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | interface SchedulersProvider {
9 | fun ui(): Scheduler
10 | fun computation(): Scheduler
11 | fun trampoline(): Scheduler
12 | fun newThread(): Scheduler
13 | fun io(): Scheduler
14 | }
15 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/AppActivityPresenter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation
2 |
3 | import com.telex.base.presentation.base.BasePresenter
4 | import com.telex.base.presentation.base.ErrorHandler
5 | import moxy.InjectViewState
6 | import javax.inject.Inject
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | @InjectViewState
12 | class AppActivityPresenter @Inject constructor(
13 | errorHandler: ErrorHandler
14 | ) : BasePresenter(errorHandler)
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/AppActivityView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation
2 |
3 | import com.telex.base.presentation.base.BaseMvpView
4 | import moxy.viewstate.strategy.AddToEndSingleStrategy
5 | import moxy.viewstate.strategy.StateStrategyType
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | @StateStrategyType(AddToEndSingleStrategy::class)
11 | interface AppActivityView : BaseMvpView
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/base/BaseDialogFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.base
2 |
3 | import android.content.Context
4 | import android.widget.Toast
5 | import androidx.fragment.app.FragmentManager
6 | import moxy.MvpAppCompatDialogFragment
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | abstract class BaseDialogFragment : MvpAppCompatDialogFragment() {
12 |
13 | override fun getContext(): Context {
14 | return super.getContext() as Context
15 | }
16 |
17 | fun showError(message: String) {
18 | Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
19 | }
20 |
21 | fun showError(resourceId: Int) {
22 | Toast.makeText(context, getString(resourceId), Toast.LENGTH_SHORT).show()
23 | }
24 |
25 | fun showProgress(isVisible: Boolean) {
26 | }
27 |
28 | fun show(fragmentManager: FragmentManager) {
29 | show(fragmentManager, tag)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/base/BaseMvpView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.base
2 |
3 | import androidx.annotation.StringRes
4 | import moxy.MvpView
5 | import moxy.viewstate.strategy.AddToEndSingleStrategy
6 | import moxy.viewstate.strategy.OneExecutionStateStrategy
7 | import moxy.viewstate.strategy.StateStrategyType
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | @StateStrategyType(AddToEndSingleStrategy::class)
13 | interface BaseMvpView : MvpView {
14 | @StateStrategyType(OneExecutionStateStrategy::class)
15 | fun showError(message: String)
16 | @StateStrategyType(OneExecutionStateStrategy::class)
17 | fun showError(@StringRes resourceId: Int)
18 | }
19 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/base/BaseOnErrorConsumer.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.base
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | abstract class BaseOnErrorConsumer : (Throwable) -> Unit {
7 |
8 | override fun invoke(error: Throwable) {
9 | onError(error)
10 | }
11 |
12 | abstract fun onError(error: Throwable)
13 | }
14 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/base/OnBackPressedListener.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.base
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | interface OnBackPressedListener {
7 | fun onBackPressed(): Boolean
8 | }
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/base/UrlTextInputLayout.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.base
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import com.google.android.material.textfield.TextInputLayout
6 | import com.telex.base.R
7 | import com.telex.base.extention.colorStateList
8 | import com.telex.base.extention.isUrl
9 |
10 | /**
11 | * @author Sergey Petrov
12 | */
13 | class UrlTextInputLayout : TextInputLayout {
14 |
15 | constructor(context: Context) : super(context, null)
16 | constructor(context: Context, attrs: AttributeSet?) : super(context, attrs, 0)
17 | constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
18 |
19 | init {
20 | setErrorTextColor(context.colorStateList(R.color.error))
21 | addOnEditTextAttachedListener {
22 | if (editText?.hint.isNullOrEmpty()) {
23 | editText?.hint = "https://"
24 | }
25 | }
26 | }
27 |
28 | fun isInputValid(condition: (() -> Boolean)? = null): Boolean {
29 | editText?.let {
30 | val value = it.text.toString()
31 | val isValid = value.isUrl() && (condition == null || condition.invoke())
32 | error = context.getString(R.string.url_invalid)
33 | isErrorEnabled = !isValid
34 | return isValid
35 | }
36 | return false
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/drawer/BottomNavigationDrawerView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.drawer
2 |
3 | import com.telex.base.model.source.local.entity.User
4 | import com.telex.base.presentation.base.BaseMvpView
5 | import moxy.viewstate.strategy.AddToEndSingleStrategy
6 | import moxy.viewstate.strategy.OneExecutionStateStrategy
7 | import moxy.viewstate.strategy.StateStrategyType
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | @StateStrategyType(AddToEndSingleStrategy::class)
13 | interface BottomNavigationDrawerView : BaseMvpView {
14 | fun showCurrentAccount(user: User)
15 | fun showAccounts(users: List)
16 | fun showDraftsCount(count: Int)
17 | @StateStrategyType(OneExecutionStateStrategy::class)
18 | fun showProxyServerEnabled()
19 | @StateStrategyType(OneExecutionStateStrategy::class)
20 | fun showProxyServerDisabled()
21 | @StateStrategyType(OneExecutionStateStrategy::class)
22 | fun showProxyServerNotExist()
23 | @StateStrategyType(OneExecutionStateStrategy::class)
24 | fun updateNightMode(nightModeEnabled: Boolean, needRecreate: Boolean)
25 | }
26 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/login/ConfigureSupportedLinksDialogFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.login
2 |
3 | import android.os.Build
4 | import android.os.Bundle
5 | import androidx.annotation.RequiresApi
6 | import androidx.appcompat.app.AlertDialog
7 | import com.google.android.material.dialog.MaterialAlertDialogBuilder
8 | import com.telex.base.R
9 | import com.telex.base.presentation.base.BaseDialogFragment
10 | import com.telex.base.utils.ViewUtils
11 |
12 | /**
13 | * @author Sergey Petrov
14 | */
15 | @RequiresApi(Build.VERSION_CODES.S)
16 | class ConfigureSupportedLinksDialogFragment : BaseDialogFragment() {
17 |
18 | override fun onCreateDialog(savedInstanceState: Bundle?): AlertDialog {
19 | val builder = MaterialAlertDialogBuilder(context)
20 | builder.setTitle(R.string.configure_supported_links)
21 | builder.setNegativeButton(R.string.cancel, null)
22 | builder.setPositiveButton(R.string.open_settings, null)
23 | builder.setMessage(getString(R.string.configure_supported_links_description))
24 |
25 | val dialog = builder.create()
26 | dialog.setOnShowListener {
27 | dialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.launch_telegram)) { _, _ -> }
28 | dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
29 | ViewUtils.openByDefaultSettings(requireActivity())
30 | dialog.dismiss()
31 | }
32 | }
33 |
34 | return dialog
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/DraftFields.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page
2 |
3 | import com.telex.base.presentation.page.format.Format
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | data class DraftFields(
9 | val title: String,
10 | val authorName: String?,
11 | val authorUrl: String?,
12 | val formats: List
13 | )
14 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/EditorMode.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | enum class EditorMode {
7 | View, Edit, Create
8 | }
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/PageEditorView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page
2 |
3 | import com.telex.base.model.source.local.entity.Page
4 | import com.telex.base.presentation.base.BaseMvpView
5 | import com.telex.base.presentation.page.format.Format
6 | import moxy.viewstate.strategy.AddToEndSingleStrategy
7 | import moxy.viewstate.strategy.StateStrategyType
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | @StateStrategyType(AddToEndSingleStrategy::class)
13 | interface PageEditorView : BaseMvpView {
14 | fun showProgress(isVisible: Boolean)
15 | fun showContentProgress(isVisible: Boolean)
16 | fun showPage(page: Page, formats: List)
17 | fun onPageSaved()
18 | fun showMore(page: Page)
19 | }
20 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/adapter/FormatImageItemMvpView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.adapter
2 |
3 | import com.telex.base.presentation.base.BaseMvpView
4 | import com.telex.base.presentation.page.format.ImageFormat
5 | import moxy.viewstate.strategy.OneExecutionStateStrategy
6 | import moxy.viewstate.strategy.StateStrategyType
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | interface FormatImageItemMvpView : BaseMvpView {
12 | @StateStrategyType(OneExecutionStateStrategy::class)
13 | fun updateImage(format: ImageFormat)
14 | }
15 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/adapter/FormatImageItemPresenter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.adapter
2 |
3 | import com.telex.base.model.interactors.PageInteractor
4 | import com.telex.base.presentation.base.BasePresenter
5 | import com.telex.base.presentation.base.ErrorHandler
6 | import com.telex.base.presentation.page.format.ImageFormat
7 | import moxy.InjectViewState
8 | import java.io.File
9 | import java.net.URI
10 | import java.util.concurrent.TimeUnit
11 | import javax.inject.Inject
12 |
13 | /**
14 | * @author Sergey Petrov
15 | */
16 | @InjectViewState
17 | class FormatImageItemPresenter @Inject constructor(
18 | private val pageInteractor: PageInteractor,
19 | errorHandler: ErrorHandler
20 | ) : BasePresenter(errorHandler) {
21 |
22 | fun uploadImage(format: ImageFormat) {
23 | pageInteractor.uploadImage(File(URI(format.url)))
24 | .doOnSubscribe { format.uploadStatus = ImageUploadStatus.InProgress }
25 | .doOnNext { url ->
26 | // update with server url
27 | format.url = url
28 | format.uploadStatus = ImageUploadStatus.Completed
29 | viewState.updateImage(format)
30 | }
31 | .doOnError { format.uploadStatus = ImageUploadStatus.Failed }
32 | .retryWhen { it.delay(3, TimeUnit.SECONDS) }
33 | .compositeSubscribe()
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/adapter/ImageUploadStatus.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.adapter
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | enum class ImageUploadStatus {
7 | Completed, InProgress, Failed
8 | }
9 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/dialogs/AuthorDialogPresenter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.dialogs
2 |
3 | import com.telex.base.model.interactors.UserInteractor
4 | import com.telex.base.presentation.base.BasePresenter
5 | import com.telex.base.presentation.base.ErrorHandler
6 | import io.reactivex.android.schedulers.AndroidSchedulers
7 | import io.reactivex.schedulers.Schedulers
8 | import javax.inject.Inject
9 | import moxy.InjectViewState
10 |
11 | /**
12 | * @author Sergey Petrov
13 | */
14 | @InjectViewState
15 | class AuthorDialogPresenter @Inject constructor(
16 | private val userInteractor: UserInteractor,
17 | errorHandler: ErrorHandler
18 | ) : BasePresenter(errorHandler) {
19 |
20 | fun loadUser() {
21 | userInteractor.observeCurrentAccount()
22 | .subscribeOn(Schedulers.io())
23 | .observeOn(AndroidSchedulers.mainThread())
24 | .compositeSubscribe(onNext = { viewState.showAuthor(it.authorName, it.authorUrl) })
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/dialogs/AuthorView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.dialogs
2 |
3 | import com.telex.base.presentation.base.BaseMvpView
4 | import moxy.viewstate.strategy.AddToEndSingleStrategy
5 | import moxy.viewstate.strategy.StateStrategyType
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | @StateStrategyType(AddToEndSingleStrategy::class)
11 | interface AuthorView : BaseMvpView {
12 | fun showAuthor(name: String?, url: String?)
13 | }
14 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/format/ImageFormat.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.format
2 |
3 | import com.telex.base.extention.isUrl
4 | import com.telex.base.model.system.ServerManager
5 | import com.telex.base.presentation.page.adapter.ImageUploadStatus
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | data class ImageFormat(
11 | var url: String,
12 | var caption: String
13 | ) : Format(FormatType.IMAGE) {
14 |
15 | var uploadStatus: ImageUploadStatus? = null
16 |
17 | override fun toHtml(): String {
18 | return "
$caption"
19 | }
20 |
21 | fun getFullUrl() = if (!url.isUrl()) ServerManager.endPoint + url else url
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/format/MediaFormat.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.format
2 |
3 | import java.net.URLDecoder
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | open class MediaFormat(
9 | open val childHtml: String,
10 | open val src: String,
11 | open var caption: String,
12 | override var type: FormatType = FormatType.IFRAME
13 | ) : Format(type, childHtml) {
14 |
15 | override fun toHtml(): String {
16 | return "$childHtml$caption"
17 | }
18 |
19 | open fun getUrl(): String {
20 | return URLDecoder.decode(src.substringAfter("?url="), "utf-8")
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/format/VideoFormat.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.format
2 |
3 | import com.telex.base.model.system.ServerManager
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | data class VideoFormat(
9 | override val childHtml: String,
10 | override val src: String,
11 | override var caption: String,
12 | override var type: FormatType = FormatType.VIDEO
13 | ) : MediaFormat(childHtml, src, caption, type) {
14 |
15 | override fun getUrl(): String {
16 | return ServerManager.endPoint + src
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/BasePageOptionsDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options
2 |
3 | import android.content.Context
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | abstract class BasePageOptionsDelegate(
9 | protected open val context: Context,
10 | protected open val pagePath: String
11 | ) {
12 | abstract fun openPageStatistics()
13 | abstract fun deletePost(onDeleteClick: () -> Unit)
14 | }
15 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/InsertImageOptionsFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options
2 |
3 | import android.app.Dialog
4 | import com.telex.base.R
5 | import com.telex.base.presentation.base.BaseOptionsFragment
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class InsertImageOptionsFragment : BaseOptionsFragment() {
11 |
12 | override val titleResId: Int = R.string.insert_image
13 |
14 | val fromGalleryOption = Option(R.drawable.ic_image, R.string.from_gallery)
15 | val byUrlOption = Option(R.drawable.ic_insert_link, R.string.by_url)
16 |
17 | override fun setupView(dialog: Dialog) {
18 | super.setupView(dialog)
19 |
20 | addOptions(fromGalleryOption, byUrlOption)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/PageOptionsPresenter.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options
2 |
3 | import com.telex.base.model.interactors.PageInteractor
4 | import com.telex.base.presentation.base.BasePresenter
5 | import com.telex.base.presentation.base.ErrorHandler
6 | import javax.inject.Inject
7 | import moxy.InjectViewState
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | @InjectViewState
13 | class PageOptionsPresenter @Inject constructor(
14 | private val pageInteractor: PageInteractor,
15 | errorHandler: ErrorHandler
16 | ) : BasePresenter(errorHandler) {
17 |
18 | fun discardDraft(pageId: Long) {
19 | pageInteractor.discardDraftPage(pageId)
20 | .justSubscribe()
21 | }
22 |
23 | fun deletePost(pageId: Long) {
24 | pageInteractor.deletePage(pageId)
25 | .justSubscribe()
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/PageOptionsView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options
2 |
3 | import com.telex.base.presentation.base.BaseMvpView
4 | import moxy.viewstate.strategy.AddToEndSingleStrategy
5 | import moxy.viewstate.strategy.StateStrategyType
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | @StateStrategyType(AddToEndSingleStrategy::class)
11 | interface PageOptionsView : BaseMvpView {
12 | fun showProgress(isVisible: Boolean)
13 | }
14 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/blocks/BlockMoreOptionsFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options.blocks
2 |
3 | import android.app.Dialog
4 | import com.telex.base.R
5 | import com.telex.base.presentation.base.BaseOptionsFragment
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | open class BlockMoreOptionsFragment : BaseOptionsFragment() {
11 |
12 | val duplicateOption = Option(R.drawable.ic_duplicate, R.string.duplicate)
13 | val deleteOption = Option(R.drawable.ic_delete, R.string.delete, color = R.color.red)
14 |
15 | override fun setupView(dialog: Dialog) {
16 | super.setupView(dialog)
17 |
18 | addOptions(duplicateOption, deleteOption)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/blocks/ImageBlockMoreOptionsFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options.blocks
2 |
3 | import android.app.Dialog
4 | import android.os.Bundle
5 | import com.telex.base.R
6 | import com.telex.base.utils.ViewUtils.Companion.copyToClipboard
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | class ImageBlockMoreOptionsFragment : BlockMoreOptionsFragment() {
12 | private val url by lazy { arguments?.getString(URL) ?: throw IllegalArgumentException("url can't be null") }
13 |
14 | private val copyLinkOption = Option(R.drawable.ic_copy, R.string.copy_image_link, onClick = { copyToClipboard(context, url) })
15 |
16 | override fun setupView(dialog: Dialog) {
17 | addOptions(copyLinkOption)
18 | super.setupView(dialog)
19 | }
20 |
21 | companion object {
22 | private const val URL = "URL"
23 |
24 | fun newInstance(url: String) = ImageBlockMoreOptionsFragment().apply {
25 | arguments = Bundle().apply {
26 | putString(URL, url)
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/page/options/blocks/MediaBlockMoreOptionsFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options.blocks
2 |
3 | import android.app.Dialog
4 | import android.content.Intent
5 | import android.net.Uri
6 | import android.os.Bundle
7 | import com.telex.base.R
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | class MediaBlockMoreOptionsFragment : BlockMoreOptionsFragment() {
13 | private val url by lazy {
14 | arguments?.getString(URL) ?: throw IllegalArgumentException("url can't be null")
15 | }
16 |
17 | private val openOption = Option(R.drawable.ic_open_in_app, R.string.open,
18 | onClick = {
19 | startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
20 | }
21 | )
22 |
23 | override fun setupView(dialog: Dialog) {
24 | addOptions(openOption)
25 | super.setupView(dialog)
26 | }
27 |
28 | companion object {
29 | private const val URL = "URL"
30 |
31 | fun newInstance(url: String) = MediaBlockMoreOptionsFragment().apply {
32 | arguments = Bundle().apply {
33 | putString(URL, url)
34 | }
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/pages/DraftsView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.pages
2 |
3 | import com.telex.base.model.source.local.entity.Page
4 | import com.telex.base.presentation.base.BaseMvpView
5 | import moxy.viewstate.strategy.AddToEndSingleStrategy
6 | import moxy.viewstate.strategy.StateStrategyType
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | @StateStrategyType(AddToEndSingleStrategy::class)
12 | interface DraftsView : BaseMvpView {
13 | fun showPages(pages: List, hasMore: Boolean)
14 | fun showEmpty()
15 | fun hideEmpty()
16 | }
17 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/pages/PagesView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.pages
2 |
3 | import com.telex.base.model.source.local.entity.Page
4 | import com.telex.base.model.source.remote.data.TopBannerData
5 | import com.telex.base.presentation.base.BaseMvpView
6 | import moxy.viewstate.strategy.AddToEndSingleStrategy
7 | import moxy.viewstate.strategy.OneExecutionStateStrategy
8 | import moxy.viewstate.strategy.StateStrategyType
9 |
10 | /**
11 | * @author Sergey Petrov
12 | */
13 | @StateStrategyType(AddToEndSingleStrategy::class)
14 | interface PagesView : BaseMvpView {
15 | fun showProgress(isVisible: Boolean)
16 | fun showPages(pages: List, hasMore: Boolean)
17 | fun showEmpty()
18 | fun hideEmpty()
19 | fun showAdapterProgress()
20 | fun hideAdapterProgress()
21 | fun showTopBanner(banner: TopBannerData)
22 | fun hideTopBanner()
23 | @StateStrategyType(OneExecutionStateStrategy::class)
24 | fun onNewPagePublished()
25 | }
26 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/settings/PrivacyPolicyFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.settings
2 |
3 | import android.os.Bundle
4 | import android.view.View
5 | import androidx.navigation.fragment.findNavController
6 | import com.telex.base.R
7 | import com.telex.base.extention.applySystemWindowInsetsPadding
8 | import com.telex.base.presentation.base.BaseFragment
9 | import kotlinx.android.synthetic.main.fragment_privacy_policy.*
10 |
11 | /**
12 | * @author Sergey Petrov
13 | */
14 | class PrivacyPolicyFragment : BaseFragment() {
15 |
16 | override val layoutRes: Int = R.layout.fragment_privacy_policy
17 |
18 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
19 | super.onViewCreated(view, savedInstanceState)
20 | rootLayout.applySystemWindowInsetsPadding(applyTop = true, applyBottom = true)
21 |
22 | closeImageView.setOnClickListener { findNavController().popBackStack() }
23 | webView.loadUrl("file:///android_asset/privacy_policy.html")
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/settings/account/AccountSettingsOptionsFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.settings.account
2 |
3 | import android.app.Dialog
4 | import com.telex.base.R
5 | import com.telex.base.presentation.base.BaseOptionsFragment
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class AccountSettingsOptionsFragment : BaseOptionsFragment() {
11 |
12 | val logoutOption = Option(R.drawable.ic_exit, R.string.logout)
13 |
14 | override fun setupView(dialog: Dialog) {
15 | super.setupView(dialog)
16 |
17 | addOption(logoutOption)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/settings/account/AccountSettingsView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.settings.account
2 |
3 | import com.telex.base.model.source.local.entity.User
4 | import com.telex.base.presentation.base.BaseMvpView
5 | import moxy.viewstate.strategy.AddToEndSingleStrategy
6 | import moxy.viewstate.strategy.StateStrategyType
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | @StateStrategyType(AddToEndSingleStrategy::class)
12 | interface AccountSettingsView : BaseMvpView {
13 | fun showProgress(isVisible: Boolean)
14 | fun showUser(user: User?)
15 | fun onUserSaved()
16 | fun onLogout()
17 | }
18 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/settings/proxy/ProxyServerOptionsFragment.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.settings.proxy
2 |
3 | import android.app.Dialog
4 | import com.telex.base.R
5 | import com.telex.base.presentation.base.BaseOptionsFragment
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class ProxyServerOptionsFragment : BaseOptionsFragment() {
11 |
12 | val deleteOption = Option(R.drawable.ic_delete, R.string.delete)
13 |
14 | override fun setupView(dialog: Dialog) {
15 | super.setupView(dialog)
16 |
17 | addOption(deleteOption)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/settings/proxy/ProxyServerView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.settings.proxy
2 |
3 | import com.telex.base.model.source.local.ProxyServer
4 | import com.telex.base.presentation.base.BaseMvpView
5 | import moxy.viewstate.strategy.AddToEndSingleStrategy
6 | import moxy.viewstate.strategy.StateStrategyType
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | @StateStrategyType(AddToEndSingleStrategy::class)
12 | interface ProxyServerView : BaseMvpView {
13 | fun showProxyServer(proxy: ProxyServer)
14 | fun onProxyServerSaved()
15 | fun showInvalidServerError()
16 | fun hideInvalidServerError()
17 | fun showInvalidPortError()
18 | fun hideInvalidPortError()
19 | }
20 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/presentation/splash/SplashView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.splash
2 |
3 | import com.telex.base.presentation.base.BaseMvpView
4 | import moxy.viewstate.strategy.AddToEndSingleStrategy
5 | import moxy.viewstate.strategy.StateStrategyType
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | @StateStrategyType(AddToEndSingleStrategy::class)
11 | interface SplashView : BaseMvpView {
12 | fun showProgress(isVisible: Boolean)
13 | fun showNext()
14 | fun onLogout()
15 | }
16 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/review/AppReviewManager.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.review
2 |
3 | import android.app.Activity
4 | import io.reactivex.Completable
5 |
6 | interface AppReviewManager {
7 | fun tryRequestAppReview(activity: Activity): Completable
8 | fun trackAuthorizedAppLaunch()
9 | }
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/review/DefaultAppReviewManager.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.review
2 |
3 | import android.app.Activity
4 | import io.reactivex.Completable
5 |
6 | class DefaultAppReviewManager : AppReviewManager {
7 |
8 | override fun tryRequestAppReview(activity: Activity): Completable {
9 | return Completable.complete()
10 | }
11 |
12 | override fun trackAuthorizedAppLaunch() {
13 | }
14 | }
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/utils/DateUtils.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.utils
2 |
3 | import android.content.Context
4 | import android.text.format.DateUtils
5 | import java.util.Calendar
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | object DateUtils {
11 | const val MONTHS_IN_YEAR = 12
12 |
13 | fun getDaysInMonth(year: Int, month: Int): Int {
14 | val calendar = Calendar.getInstance()
15 | calendar.set(year, month - 1, 1)
16 | return calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
17 | }
18 |
19 | fun getMonthName(context: Context, month: Int, short: Boolean): String {
20 | val calendar = Calendar.getInstance()
21 | calendar.set(Calendar.MONTH, month - 1)
22 | calendar.set(Calendar.DATE, 1)
23 |
24 | var flags = DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_NO_MONTH_DAY or DateUtils.FORMAT_NO_YEAR
25 | if (short) {
26 | flags = flags or DateUtils.FORMAT_ABBREV_MONTH
27 | }
28 | return DateUtils
29 | .formatDateTime(context, calendar.timeInMillis, flags)
30 | .capitalize()
31 | }
32 |
33 | fun getCurrentYear(): Int {
34 | return Calendar.getInstance().get(Calendar.YEAR)
35 | }
36 |
37 | fun getCurrentMonth(): Int {
38 | return Calendar.getInstance().get(Calendar.MONTH)
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/base/src/main/java/com/telex/base/utils/PermissionsHelper.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.utils
2 |
3 | import android.app.Activity
4 | import android.content.pm.PackageManager.PERMISSION_GRANTED
5 | import android.os.Build
6 | import androidx.core.content.ContextCompat.checkSelfPermission
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | object PermissionsHelper {
12 |
13 | fun checkPermissions(activity: Activity, requestCode: Int, vararg permissions: String): Boolean {
14 | var isGranted = true
15 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
16 | val permissionsList = ArrayList()
17 | for (p in permissions) {
18 | if (checkSelfPermission(activity, p) != PERMISSION_GRANTED) {
19 | permissionsList.add(p)
20 | }
21 | }
22 | if (!permissionsList.isEmpty()) {
23 | isGranted = false
24 | activity.requestPermissions(permissionsList.toTypedArray(), requestCode)
25 | }
26 | }
27 | return isGranted
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/base/src/main/res/anim/item_animation_from_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
11 |
16 |
17 |
--------------------------------------------------------------------------------
/base/src/main/res/anim/layout_animation_from_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/base/src/main/res/anim/slide_down.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/base/src/main/res/anim/slide_up.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_account.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_add.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_block_text_subject.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_block_text_subject.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_bug.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_chart.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_check_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_check_circle.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_close.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_code.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_copy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_delete.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_discard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_discard.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_done.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_dropdown_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_dropdown_arrow.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_duplicate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_duplicate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_edit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_exit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_bold.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_heading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_heading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_italic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_italic.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_list_bulleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_list_bulleted.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_list_numbered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_list_numbered.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_quote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_quote.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_strikethrough.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_strikethrough.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_subheading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_subheading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_format_underlined.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_format_underlined.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_gift.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_hidden.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_hide.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_image.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_info.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_insert_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_insert_line.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_insert_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_insert_link.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_menu.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_more.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_move_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_move_down.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_move_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_move_up.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_night_mode.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_open_in_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_open_in_app.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_privacy_policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_privacy_policy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_proxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_proxy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_rate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_rate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_redo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_reset.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_settings.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_share.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_telegram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_telegram.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-hdpi/ic_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-hdpi/ic_undo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_account.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_add.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_block_text_subject.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_block_text_subject.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_bug.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_chart.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_check_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_check_circle.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_close.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_code.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_copy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_delete.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_discard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_discard.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_done.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_dropdown_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_dropdown_arrow.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_duplicate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_duplicate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_edit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_exit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_bold.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_heading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_heading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_italic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_italic.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_list_bulleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_list_bulleted.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_list_numbered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_list_numbered.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_quote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_quote.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_strikethrough.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_strikethrough.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_subheading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_subheading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_format_underlined.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_format_underlined.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_gift.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_hidden.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_hide.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_image.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_info.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_insert_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_insert_line.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_insert_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_insert_link.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_menu.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_more.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_move_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_move_down.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_move_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_move_up.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_night_mode.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_open_in_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_open_in_app.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_privacy_policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_privacy_policy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_proxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_proxy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_rate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_rate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_redo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_reset.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_settings.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_share.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_telegram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_telegram.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-mdpi/ic_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-mdpi/ic_undo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_account.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_add.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_block_text_subject.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_block_text_subject.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_bug.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_chart.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_check_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_check_circle.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_close.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_code.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_copy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_delete.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_discard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_discard.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_done.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_dropdown_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_dropdown_arrow.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_duplicate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_duplicate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_edit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_exit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_bold.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_heading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_heading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_italic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_italic.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_list_bulleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_list_bulleted.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_list_numbered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_list_numbered.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_quote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_quote.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_strikethrough.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_strikethrough.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_subheading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_subheading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_format_underlined.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_format_underlined.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_gift.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_hidden.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_hide.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_image.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_info.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_insert_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_insert_line.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_insert_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_insert_link.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_menu.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_more.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_move_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_move_down.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_move_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_move_up.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_night_mode.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_open_in_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_open_in_app.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_privacy_policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_privacy_policy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_proxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_proxy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_rate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_rate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_redo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_reset.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_settings.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_share.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_telegram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_telegram.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xhdpi/ic_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xhdpi/ic_undo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_account.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_add.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_block_text_subject.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_block_text_subject.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_bug.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_chart.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_check_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_check_circle.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_close.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_code.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_copy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_delete.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_discard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_discard.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_done.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_dropdown_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_dropdown_arrow.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_duplicate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_duplicate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_edit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_exit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_bold.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_heading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_heading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_italic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_italic.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_list_bulleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_list_bulleted.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_list_numbered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_list_numbered.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_quote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_quote.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_strikethrough.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_strikethrough.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_subheading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_subheading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_format_underlined.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_format_underlined.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_gift.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_hidden.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_hide.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_image.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_info.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_insert_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_insert_line.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_insert_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_insert_link.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_menu.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_more.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_move_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_move_down.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_move_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_move_up.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_night_mode.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_open_in_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_open_in_app.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_privacy_policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_privacy_policy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_proxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_proxy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_rate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_rate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_redo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_reset.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_settings.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_share.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_telegram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_telegram.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxhdpi/ic_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxhdpi/ic_undo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_account.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_add.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_arrow_down.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_block_text_subject.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_block_text_subject.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_bug.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_chart.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_check_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_check_circle.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_close.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_close_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_close_circle.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_code.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_copy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_delete.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_discard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_discard.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_done.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_dropdown_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_dropdown_arrow.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_duplicate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_duplicate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_edit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_exit.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_bold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_bold.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_heading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_heading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_italic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_italic.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_list_bulleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_list_bulleted.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_list_numbered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_list_numbered.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_quote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_quote.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_strikethrough.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_strikethrough.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_subheading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_subheading.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_format_underlined.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_format_underlined.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_gift.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_hidden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_hidden.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_hide.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_image.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_info.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_insert_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_insert_line.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_insert_link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_insert_link.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_menu.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_more.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_move_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_move_down.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_move_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_move_up.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_night_mode.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_open_in_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_open_in_app.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_privacy_policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_privacy_policy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_proxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_proxy.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_rate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_rate.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_redo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_reset.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_settings.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_share.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_telegram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_telegram.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable-xxxhdpi/ic_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable-xxxhdpi/ic_undo.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable/background_chart_marker.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/background_chip.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/background_format_more_overlay.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/background_hr.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/bottom_app_bar_title_foreground.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
18 | -
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/button_format.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/button_format_shape.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/button_format_shape_checked.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/drawable/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/main/res/drawable/ic_views.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/ic_write.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/item_divider.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/base/src/main/res/drawable/splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/base/src/main/res/font/roboto.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/base/src/main/res/font/roboto_bold.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/base/src/main/res/font/roboto_medium.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/base/src/main/res/font/roboto_semibold.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/activity_splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
17 |
18 |
26 |
27 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/dialog_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
14 |
15 |
23 |
24 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/fragment_bottom_navigation_drawer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
16 |
17 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/fragment_bottom_sheet_options.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/fragment_drafts.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
19 |
20 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_add_account.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
15 |
16 |
22 |
23 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_footer_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
14 |
15 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_format_aside.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_format_heading.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_format_horizontal_rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_format_preformat.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
27 |
28 |
33 |
34 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_format_quote.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/item_format_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/layout_format_toogle_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
18 |
19 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/layout_item_format_more.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
21 |
22 |
29 |
30 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/layout_no_stories.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
19 |
20 |
29 |
30 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/menu_item_drafts.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
--------------------------------------------------------------------------------
/base/src/main/res/layout/menu_item_switch.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/base/src/main/res/menu/menu_drawer.xml:
--------------------------------------------------------------------------------
1 |
2 |
36 |
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/main/res/values-night/color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @android:color/transparent
4 |
--------------------------------------------------------------------------------
/base/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 |
23 |
24 |
--------------------------------------------------------------------------------
/base/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/base/src/main/res/values-v23/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/base/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/base/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #000000
4 | #ffffffff
5 |
6 | #66232830
7 |
8 | #232830
9 | #1d2027
10 | #2B3039
11 |
12 | #F8F8F8
13 | #979eaf
14 | #d5dbdc
15 | @color/red
16 | #F4511E
17 |
18 | @color/black
19 | @color/white
20 | @color/grey
21 |
22 | #F5F8FC
23 |
24 | @color/light_grey
25 | #485160
26 |
27 | #3CC23F
28 |
29 | #80ffffff
30 |
31 |
--------------------------------------------------------------------------------
/base/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #000000
4 |
--------------------------------------------------------------------------------
/base/src/main/res/values/motion.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 300
4 | 225
5 | 175
6 |
--------------------------------------------------------------------------------
/base/src/main/res/values/preloaded_fonts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - @font/roboto
5 | - @font/roboto_bold
6 | - @font/roboto_medium
7 | - @font/roboto_semibold
8 |
9 |
10 |
--------------------------------------------------------------------------------
/base/src/pro/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/base/src/pro/java/com/telex/base/presentation/home/TopBannerDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.home
2 |
3 | import com.telex.base.model.source.remote.data.TopBannerData
4 | import com.telex.base.presentation.pages.BaseTopBannerDelegate
5 | import com.telex.base.presentation.pages.PagesFragment
6 |
7 | /**
8 | * @author Sergey Petrov
9 | */
10 | class TopBannerDelegate(
11 | fragment: PagesFragment?,
12 | banner: TopBannerData
13 | ) : BaseTopBannerDelegate(fragment, banner) {
14 |
15 | override val enabled: Boolean
16 | get() = !banner.disabled && banner.showForPro
17 |
18 | override fun showDefaultOnSecondActionClicked() {
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/base/src/pro/java/com/telex/base/presentation/page/AddImageFromStorageDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page
2 |
3 | import android.app.Activity
4 | import android.content.Context
5 | import android.content.Intent
6 | import com.telex.base.presentation.page.format.ImageFormat
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | class AddImageFromStorageDelegate(
12 | private val context: Context
13 | ) : BaseAddImageFromStorageDelegate() {
14 |
15 | override fun startActivityForResult(context: Context, requestCode: Int) {
16 | val galleryIntent = Intent(Intent.ACTION_GET_CONTENT)
17 | galleryIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
18 | galleryIntent.type = ACCEPTED_IMAGE_MIME
19 | (context as Activity).startActivityForResult(galleryIntent, requestCode)
20 | }
21 |
22 | override fun convertIntentDataToImageFormats(context: Context, data: Intent): List {
23 | val images = arrayListOf()
24 |
25 | val clipData = data.clipData
26 | if (clipData != null) {
27 | val count = clipData.itemCount
28 | for (i in 0 until count) {
29 | val imageUri = clipData.getItemAt(i).uri
30 | images.add(convertUriToImageFormat(context, imageUri))
31 | }
32 | } else if (data.data != null) {
33 | images.add(convertUriToImageFormat(context, requireNotNull(data.data)))
34 | }
35 |
36 | return images
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/base/src/pro/java/com/telex/base/presentation/page/options/PageOptionsDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.page.options
2 |
3 | import android.content.Context
4 | import android.content.Intent
5 | import com.google.android.material.dialog.MaterialAlertDialogBuilder
6 | import com.telex.base.R
7 | import com.telex.base.presentation.statistics.PageStatisticsActivity
8 |
9 | /**
10 | * @author Sergey Petrov
11 | */
12 | class PageOptionsDelegate(
13 | override val context: Context,
14 | override val pagePath: String
15 | ) : BasePageOptionsDelegate(context, pagePath) {
16 |
17 | override fun openPageStatistics() {
18 | val intent = Intent(context, PageStatisticsActivity::class.java)
19 | intent.putExtra(PageStatisticsActivity.PAGE_PATH, pagePath)
20 | context.startActivity(intent)
21 | }
22 |
23 | override fun deletePost(onDeleteClick: () -> Unit) {
24 | val builder = MaterialAlertDialogBuilder(context)
25 | builder.setTitle(context.getString(R.string.delete_post) + "?")
26 | builder.setMessage(R.string.delete_post_description)
27 | builder.setPositiveButton(context.getString(R.string.delete)) { _, _ -> onDeleteClick.invoke() }
28 | builder.setNegativeButton(context.getString(R.string.cancel)) { dialog, _ -> dialog.dismiss() }
29 | builder.create().show()
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/base/src/pro/java/com/telex/base/presentation/statistics/ChartMarkerView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.statistics
2 |
3 | import android.content.Context
4 | import com.github.mikephil.charting.components.MarkerView
5 | import com.github.mikephil.charting.data.Entry
6 | import com.github.mikephil.charting.highlight.Highlight
7 | import com.github.mikephil.charting.utils.MPPointF
8 | import com.telex.base.R
9 | import kotlinx.android.synthetic.pro.layout_chart_marker.view.*
10 |
11 | /**
12 | * @author Sergey Petrov
13 | */
14 | class ChartMarkerView(context: Context) : MarkerView(context, R.layout.layout_chart_marker) {
15 |
16 | override fun refreshContent(entry: Entry, highlight: Highlight?) {
17 | super.refreshContent(entry, highlight)
18 | viewsTextView.text = entry.y.toInt().toString()
19 | }
20 |
21 | fun setTitle(text: String) {
22 | dateTextView.text = text
23 | }
24 |
25 | override fun getOffset(): MPPointF {
26 | return MPPointF((-(width / 2)).toFloat(), (-height - 50).toFloat())
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/base/src/pro/java/com/telex/base/presentation/statistics/PageStatisticsView.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.statistics
2 |
3 | import com.telex.base.presentation.base.BaseMvpView
4 | import moxy.viewstate.strategy.AddToEndSingleStrategy
5 | import moxy.viewstate.strategy.OneExecutionStateStrategy
6 | import moxy.viewstate.strategy.StateStrategyType
7 |
8 | /**
9 | * @author Sergey Petrov
10 | */
11 | @StateStrategyType(AddToEndSingleStrategy::class)
12 | interface PageStatisticsView : BaseMvpView {
13 | fun showPageViewsSet(values: Map)
14 | fun showPageViews(viewsCount: Int)
15 | fun showPageTotalViews(viewsCount: Int)
16 | @StateStrategyType(OneExecutionStateStrategy::class)
17 | fun showProgress()
18 | fun hideProgress()
19 | fun enableNext(isEnabled: Boolean)
20 | fun enablePrev(isEnabled: Boolean)
21 | fun updateForMonthStatisticsType()
22 | fun updateForYearStatisticsType()
23 | @StateStrategyType(OneExecutionStateStrategy::class)
24 | fun showYear(year: Int)
25 | @StateStrategyType(OneExecutionStateStrategy::class)
26 | fun showMonth(month: Int)
27 | @StateStrategyType(OneExecutionStateStrategy::class)
28 | fun showYearPeriods(periods: Array)
29 | @StateStrategyType(OneExecutionStateStrategy::class)
30 | fun showMonthPeriods(periods: Array)
31 | }
32 |
--------------------------------------------------------------------------------
/base/src/pro/java/com/telex/base/presentation/statistics/StatisticsType.kt:
--------------------------------------------------------------------------------
1 | package com.telex.base.presentation.statistics
2 |
3 | /**
4 | * @author Sergey Petrov
5 | */
6 | enum class StatisticsType {
7 | Month, Year
8 | }
9 |
--------------------------------------------------------------------------------
/base/src/pro/res/layout/layout_chart_marker.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
17 |
18 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/base/src/pro/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/base/src/pro/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/base/src/pro/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | "Telegraph X Pro"
4 | "https://play.google.com/store/apps/details?id=com.telex.pro"
5 |
6 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext {
3 | kotlin_version = '1.3.61'
4 | navigationVersion = '2.2.2'
5 | }
6 | repositories {
7 | google()
8 | jcenter()
9 | }
10 | dependencies {
11 | classpath 'com.android.tools.build:gradle:3.6.2'
12 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
13 | classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
14 | classpath 'com.google.gms:google-services:4.3.3'
15 | classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
16 | }
17 | }
18 |
19 | allprojects {
20 | repositories {
21 | google()
22 | jcenter()
23 | maven { url 'https://jitpack.io' }
24 | }
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
31 | ext {
32 | versionCode = 56
33 | versionName = "2.4.4"
34 |
35 | compileSdk = 31
36 | targetSdk = 31
37 | minSdk = 21
38 |
39 | moxyVersion = '2.0.2'
40 | ktlintVersion = '0.36.0'
41 | }
42 |
--------------------------------------------------------------------------------
/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=-Xmx1536m
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 | android.useAndroidX=true
19 | android.enableJetifier=true
20 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Oct 23 14:31:33 CEST 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
7 |
--------------------------------------------------------------------------------
/ktlint.gradle:
--------------------------------------------------------------------------------
1 | repositories {
2 | jcenter()
3 | }
4 |
5 | configurations {
6 | ktlint
7 | }
8 |
9 | dependencies {
10 | ktlint ("com.pinterest:ktlint:$ktlintVersion")
11 | }
12 |
13 | task ktlint(type: JavaExec, group: "verification") {
14 | enabled = false
15 | description = "Check Kotlin code style."
16 | classpath = configurations.ktlint
17 | main = "com.pinterest.ktlint.Main"
18 | args "src/**/*.kt"
19 | // to generate report in checkstyle format prepend following args:
20 | // "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
21 | // see https://github.com/pinterest/ktlint#usage for more
22 | }
23 | preBuild.dependsOn ktlint
24 |
25 | task ktlintFormat(type: JavaExec, group: "formatting") {
26 | description = "Fix Kotlin code style deviations."
27 | classpath = configurations.ktlint
28 | main = "com.pinterest.ktlint.Main"
29 | args "-F", "src/**/*.kt"
30 | }
31 |
--------------------------------------------------------------------------------
/sandbox/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /build
5 | /.idea/
--------------------------------------------------------------------------------
/sandbox/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'kotlin-android'
3 | apply plugin: 'kotlin-android-extensions'
4 | apply plugin: 'kotlin-kapt'
5 |
6 | apply from: "../ktlint.gradle"
7 |
8 | android {
9 | compileSdkVersion rootProject.compileSdk
10 |
11 | defaultConfig {
12 | minSdkVersion rootProject.minSdk
13 | targetSdkVersion rootProject.targetSdk
14 | versionCode rootProject.versionCode
15 | versionName rootProject.versionName
16 | multiDexEnabled true
17 | }
18 |
19 | dexOptions {
20 | preDexLibraries = false
21 | }
22 |
23 | buildTypes {
24 | debug {
25 | minifyEnabled false
26 | }
27 | }
28 |
29 | flavorDimensions "default"
30 |
31 | productFlavors {
32 | free {
33 | }
34 |
35 | pro {
36 | }
37 | }
38 |
39 | sourceSets {
40 | main {
41 | assets.srcDirs = ['src/main/assets']
42 | java.srcDirs = ['src/main/java']
43 | }
44 | free {
45 | java.srcDirs = ['src/free/java']
46 | }
47 | pro {
48 | java.srcDirs = ['src/pro/java']
49 | }
50 | }
51 |
52 | compileOptions {
53 | sourceCompatibility JavaVersion.VERSION_1_8
54 | targetCompatibility JavaVersion.VERSION_1_8
55 | }
56 | }
57 |
58 | dependencies {
59 | implementation project(':base')
60 |
61 | kapt "com.github.moxy-community:moxy-compiler:$moxyVersion"
62 | }
--------------------------------------------------------------------------------
/sandbox/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/sandbox/src/main/java/com/telex/App.kt:
--------------------------------------------------------------------------------
1 | package com.telex
2 |
3 | import com.telex.base.BaseApp
4 |
5 | /**
6 | * @author Sergey Petrov
7 | */
8 | class App : BaseApp()
9 |
--------------------------------------------------------------------------------
/screenshots/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/screenshots/demo.gif
--------------------------------------------------------------------------------
/screenshots/night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/screenshots/night_mode.png
--------------------------------------------------------------------------------
/screenshots/stats.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergpetrov/telegraph-android/dc1be256036ab3317171b37434217e0bed96346c/screenshots/stats.gif
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':editor:aztec', ':base'
2 | include ':sandbox'
3 |
--------------------------------------------------------------------------------