├── .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 | 4 | 5 | 8 | 9 | 13 | 14 | 15 | 16 | 20 | 21 | 25 | 26 | 29 | 30 | 34 | 35 | 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 | --------------------------------------------------------------------------------