├── .gitignore ├── .idea ├── caches │ └── build_file_checksums.ser ├── codeStyles │ └── Project.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── EManual-Android.iml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── keystore ├── libs │ ├── gson-2.3.1.jar │ ├── umeng-analytics-v5.6.4.jar │ └── zip4j_1.3.2.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── io │ │ └── github │ │ └── emanual │ │ └── app │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── 404.html │ ├── 404.md │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap-responsive.css │ │ │ ├── bootstrap-responsive.min.css │ │ │ ├── bootstrap.css │ │ │ └── bootstrap.min.css │ │ ├── img │ │ │ ├── glyphicons-halflings-white.png │ │ │ └── glyphicons-halflings.png │ │ └── js │ │ │ ├── bootstrap.js │ │ │ └── bootstrap.min.js │ ├── css │ │ └── common.css │ ├── fontawesome-webfont.ttf │ ├── forum │ │ ├── bundle.js │ │ ├── css │ │ │ └── font-awesome │ │ │ │ └── css │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── font-awesome.css │ │ │ │ ├── font-awesome.css.map │ │ │ │ ├── font-awesome.min.css │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ └── index.html │ ├── img │ │ ├── binding_dark.png │ │ ├── brushed.png │ │ ├── graphy.png │ │ └── sandpaper.png │ ├── js │ │ ├── highlight.pack.js │ │ ├── jquery.js │ │ └── marked.js │ ├── preview-question │ │ ├── css │ │ │ ├── github-markdown.css │ │ │ ├── main.css │ │ │ └── weui.min.css │ │ ├── index.html │ │ └── script │ │ │ ├── bridge.js │ │ │ ├── main.js │ │ │ └── zepto.min.js │ ├── preview.html │ ├── preview1.html │ └── styles │ │ ├── arta.css │ │ ├── ascetic.css │ │ ├── atelier-dune.dark.css │ │ ├── atelier-dune.light.css │ │ ├── atelier-forest.dark.css │ │ ├── atelier-forest.light.css │ │ ├── atelier-heath.dark.css │ │ ├── atelier-heath.light.css │ │ ├── atelier-lakeside.dark.css │ │ ├── atelier-lakeside.light.css │ │ ├── atelier-seaside.dark.css │ │ ├── atelier-seaside.light.css │ │ ├── brown_paper.css │ │ ├── brown_papersq.png │ │ ├── dark.css │ │ ├── default.css │ │ ├── docco.css │ │ ├── far.css │ │ ├── foundation.css │ │ ├── github.css │ │ ├── googlecode.css │ │ ├── idea.css │ │ ├── ir_black.css │ │ ├── magula.css │ │ ├── mono-blue.css │ │ ├── monokai.css │ │ ├── monokai_sublime.css │ │ ├── obsidian.css │ │ ├── paraiso.dark.css │ │ ├── paraiso.light.css │ │ ├── pojoaque.css │ │ ├── pojoaque.jpg │ │ ├── railscasts.css │ │ ├── rainbow.css │ │ ├── school_book.css │ │ ├── school_book.png │ │ ├── solarized_dark.css │ │ ├── solarized_light.css │ │ ├── sunburst.css │ │ ├── tomorrow-night-blue.css │ │ ├── tomorrow-night-bright.css │ │ ├── tomorrow-night-eighties.css │ │ ├── tomorrow-night.css │ │ ├── tomorrow.css │ │ ├── vs.css │ │ ├── xcode.css │ │ └── zenburn.css │ ├── java │ └── io │ │ └── github │ │ └── emanual │ │ └── app │ │ ├── App.java │ │ ├── CoreService.java │ │ ├── api │ │ ├── EmanualAPI.java │ │ ├── JavaAPI.java │ │ ├── NewFeedsAPI.java │ │ └── RestClient.java │ │ ├── entity │ │ ├── BaseEntity.java │ │ ├── BookInfoEntity.java │ │ ├── BookJSONEntity.java │ │ ├── FeedsItemEntity.java │ │ ├── FileTreeEntity.java │ │ ├── InterviewInfoEntity.java │ │ ├── InterviewJSONEntity.java │ │ ├── MaintainerEntity.java │ │ ├── NewsFeedsEntity.java │ │ └── QuestionEntity.java │ │ ├── ui │ │ ├── AboutActivity.java │ │ ├── AppStartActivity.java │ │ ├── BookFeedsListActivity.java │ │ ├── BrowserActivity.java │ │ ├── DetailActivity.java │ │ ├── FeedbackActivity.java │ │ ├── FileTreeActivity.java │ │ ├── InterviewFeedsActivity.java │ │ ├── MainActivity.java │ │ ├── QuestionDetailActivity.java │ │ ├── QuestionListActivity.java │ │ ├── adapter │ │ │ ├── ArticleListAdapter.java │ │ │ ├── BookListAdapter.java │ │ │ ├── FeedsListAdapter.java │ │ │ ├── FileTreeAdapter.java │ │ │ ├── InterviewListAdapter.java │ │ │ ├── MainFragmentPagerAdapter.java │ │ │ ├── NewFeedsAdapter.java │ │ │ ├── QuestionListAdapter.java │ │ │ └── TopicListAdapter.java │ │ ├── base │ │ │ ├── activity │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── SwipeBackActivity.java │ │ │ │ └── SwipeRefreshActivity.java │ │ │ └── fragment │ │ │ │ ├── BaseFragment.java │ │ │ │ └── SwipeRefreshFragment.java │ │ ├── event │ │ │ ├── BaseEvent.java │ │ │ ├── BookDownloadEndEvent.java │ │ │ ├── BookDownloadFaildEvent.java │ │ │ ├── BookDownloadProgressEvent.java │ │ │ ├── BookDownloadStartEvent.java │ │ │ ├── EmptyEvent.java │ │ │ ├── FinishLoadQuestionListEvent.java │ │ │ ├── FinishQueryBookListEvent.java │ │ │ ├── FinishQueryInterviewListEvent.java │ │ │ ├── GetQuestionListEvent.java │ │ │ ├── InterviewDownloadEndEvent.java │ │ │ ├── InterviewDownloadFaildEvent.java │ │ │ ├── InterviewDownloadProgressEvent.java │ │ │ ├── InterviewDownloadStartEvent.java │ │ │ ├── QueryBookListEvent.java │ │ │ ├── QueryInterviewListEvent.java │ │ │ ├── QuestionUpdateEvent.java │ │ │ └── UnPackFinishEvent.java │ │ └── fragment │ │ │ ├── BookListFragment.java │ │ │ ├── ExploreFragment.java │ │ │ ├── InterviewDetailFragment.java │ │ │ ├── InterviewListFragment.java │ │ │ ├── NewFeedsFragment.java │ │ │ └── ResourceCenterFragment.java │ │ ├── utils │ │ ├── AndroidUtils.java │ │ ├── AppPath.java │ │ ├── BookResource.java │ │ ├── DataPool.java │ │ ├── EManualUtils.java │ │ ├── InterviewResource.java │ │ ├── MyDBManager.java │ │ ├── ParseUtils.java │ │ ├── StorageUtils.java │ │ ├── SwipeRefreshLayoutUtils.java │ │ ├── UmengAnalytics.java │ │ ├── ZipUtils.java │ │ └── _.java │ │ └── widget │ │ ├── DefaultWebView.java │ │ ├── DownloadConfirmDialog.java │ │ ├── NewVersionDialog.java │ │ └── SwipeBackLayout.java │ └── res │ ├── anim │ ├── alpha.xml │ ├── layout_listview_top_to_bottom_alpha.xml │ ├── left_in.xml │ ├── left_out.xml │ ├── right_in.xml │ ├── right_out.xml │ ├── stay.xml │ ├── zoom_in.xml │ └── zoom_out.xml │ ├── drawable-hdpi │ ├── ic_action_about.png │ ├── ic_action_about_light.png │ ├── ic_action_accept.png │ ├── ic_action_cleanup.png │ ├── ic_action_more.png │ ├── ic_action_rating_important.png │ ├── ic_action_rating_important_dark.png │ ├── ic_action_rating_not_important.png │ ├── ic_action_rating_not_important_dark.png │ ├── ic_action_settings.png │ ├── ic_action_settings_dark.png │ ├── ic_action_social_share.png │ ├── ic_action_social_share_dark.png │ ├── ic_bg_dialog_white.9.png │ ├── ic_btn_blue_transparent_normal.9.png │ ├── ic_btn_blue_transparent_pressed.9.png │ ├── ic_btn_green_normal.9.png │ ├── ic_btn_green_pressed.9.png │ ├── ic_btn_red_normal.9.png │ ├── ic_btn_red_pressed.9.png │ ├── ic_check_circle_black_48dp.png │ ├── ic_cloud_download_black_36dp.png │ ├── ic_icon_code.png │ ├── ic_icon_code_small.png │ ├── ic_icon_code_small_pure.png │ ├── ic_icon_document.png │ ├── ic_icon_file.png │ ├── ic_keyboard_arrow_right_black_36dp.png │ ├── ic_line_1.png │ ├── ic_line_2.png │ ├── ic_line_3.png │ ├── ic_module_android.png │ ├── ic_module_angular.png │ ├── ic_module_c.png │ ├── ic_module_http2.png │ ├── ic_module_java.png │ ├── ic_module_javascript.png │ ├── ic_module_php.png │ ├── ic_module_python.png │ ├── ic_module_scala.png │ ├── ic_navigation_previous_item.png │ ├── ic_notify_new.png │ ├── ic_progressbar_blue.png │ └── ic_widget_download.png │ ├── drawable-xhdpi │ └── ic_app_launcher.png │ ├── drawable │ ├── btn_common_green.xml │ ├── btn_common_red.xml │ ├── btn_item_whit2grey.xml │ └── progressbar_blue.xml │ ├── layout │ ├── acty_about.xml │ ├── acty_appstart.xml │ ├── acty_browser.xml │ ├── acty_detail.xml │ ├── acty_favouritelist.xml │ ├── acty_feedback.xml │ ├── acty_feeds_list.xml │ ├── acty_filetree.xml │ ├── acty_interview_feeds.xml │ ├── acty_main.xml │ ├── acty_question_detail.xml │ ├── acty_question_list.xml │ ├── acty_topiclist.xml │ ├── adapter_articlelist.xml │ ├── adapter_booklist.xml │ ├── adapter_favouritelist.xml │ ├── adapter_feedslist.xml │ ├── adapter_filetree.xml │ ├── adapter_interviewlist.xml │ ├── adapter_newfeeds.xml │ ├── adapter_questionlist.xml │ ├── adapter_topiclist.xml │ ├── dlg_newversion.xml │ ├── fragment_book_list.xml │ ├── fragment_explore.xml │ ├── fragment_interview_detail.xml │ ├── fragment_interview_list.xml │ ├── fragment_newfeeds.xml │ ├── fragment_resource_center.xml │ └── toolbar.xml │ ├── menu │ ├── browser.xml │ ├── detail.xml │ ├── favouritelist.xml │ ├── favouritelist_selected.xml │ ├── main.xml │ └── menu_question_detail.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── shadow_left.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── values-land-v19 │ └── bools.xml │ ├── values-sw600dp │ └── dimens.xml │ ├── values-sw720dp │ └── dimens.xml │ ├── values-v11 │ └── styles.xml │ ├── values-v14 │ └── styles.xml │ ├── values-v19 │ ├── bools.xml │ ├── dimens.xml │ └── theme.xml │ ├── values-v21 │ └── styles.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── color.xml │ ├── dimens.xml │ ├── strings.xml │ ├── styles.xml │ └── themes.xml ├── build.gradle ├── extras ├── .gitkeep ├── extras.iml └── umeng-update │ ├── .gitignore │ ├── build.gradle │ ├── libs │ └── umeng-update-v2.6.0.1.jar │ ├── proguard-rules.pro │ ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── iemanual │ │ │ └── umeng_update │ │ │ └── ApplicationTest.java │ └── main │ │ ├── AndroidManifest.xml │ │ ├── jniLibs │ │ └── libbspatch.so │ │ └── res │ │ ├── drawable-hdpi │ │ ├── umeng_update_btn_check_off_focused_holo_light.png │ │ ├── umeng_update_btn_check_off_holo_light.png │ │ ├── umeng_update_btn_check_off_pressed_holo_light.png │ │ ├── umeng_update_btn_check_on_focused_holo_light.png │ │ ├── umeng_update_btn_check_on_holo_light.png │ │ ├── umeng_update_btn_check_on_pressed_holo_light.png │ │ ├── umeng_update_close_bg_normal.png │ │ └── umeng_update_close_bg_tap.png │ │ ├── drawable │ │ ├── tb_munion_icon.xml │ │ ├── tb_munion_item_selector.xml │ │ ├── umeng_common_gradient_green.xml │ │ ├── umeng_common_gradient_orange.xml │ │ ├── umeng_common_gradient_red.xml │ │ ├── umeng_update_button_cancel_bg_focused.xml │ │ ├── umeng_update_button_cancel_bg_normal.xml │ │ ├── umeng_update_button_cancel_bg_selector.xml │ │ ├── umeng_update_button_cancel_bg_tap.xml │ │ ├── umeng_update_button_check_selector.xml │ │ ├── umeng_update_button_close_bg_selector.xml │ │ ├── umeng_update_button_ok_bg_focused.xml │ │ ├── umeng_update_button_ok_bg_normal.xml │ │ ├── umeng_update_button_ok_bg_selector.xml │ │ ├── umeng_update_button_ok_bg_tap.xml │ │ ├── umeng_update_dialog_bg.xml │ │ ├── umeng_update_title_bg.xml │ │ └── umeng_update_wifi_disable.png │ │ ├── layout-v9 │ │ └── umeng_common_download_notification.xml │ │ ├── layout │ │ ├── tb_munion_aditem.xml │ │ ├── tb_munion_adview.xml │ │ ├── umeng_common_download_notification.xml │ │ └── umeng_update_dialog.xml │ │ ├── values-zh │ │ ├── umeng_common_strings.xml │ │ └── umeng_update_string.xml │ │ └── values │ │ ├── strings.xml │ │ ├── tb_munion_strings.xml │ │ ├── umeng_common_strings.xml │ │ └── umeng_update_string.xml │ └── umeng-update.iml ├── gradle-app.setting ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | build 7 | 8 | # Built application files 9 | *.apk 10 | *.ap_ 11 | 12 | # Files for the Dalvik VM 13 | *.dex 14 | 15 | # Java class files 16 | *.class 17 | 18 | # Generated files 19 | bin/ 20 | gen/ 21 | 22 | # Gradle files 23 | .gradle/ 24 | build/ 25 | /*/build/ 26 | 27 | # Local configuration file (sdk path, etc) 28 | local.properties 29 | 30 | # Proguard folder generated by Eclipse 31 | proguard/ 32 | 33 | # Log Files 34 | *.log 35 | 36 | #iml -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /EManual-Android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | EManual-Android 2 | --- 3 | [![GitHub version](https://badge.fury.io/gh/EManual%2FEManual-Android.svg)](https://badge.fury.io/gh/EManual%2FEManual-Android) ![license](http://img.shields.io/badge/license-Apache2-brightgreen.svg) ![platform](http://img.shields.io/badge/platform-Android-blue.svg) 4 | 5 | 6 | 7 | **Android client for EManual.** 8 | EManual makes you learn programming language more easier. 9 | Currently, it focuse on **Java and Android** 10 | 11 | Configuration 12 | --- 13 | ### for Eclipse 14 | 15 | 1. Java Compiler → Annotation Processing and check `"Enable project specific settings".` 16 | 17 | 2. Expand the Annotation Processing section and select Factory Path. Check `"Enable project specific settings"` and then click `"Add JARs…"`. Navigate to the project's `libs/` folder and select the Butter Knife jar. 18 | 19 | 3. Click `"Ok"` to save the new settings. Eclipse will ask you to rebuild your project to which you should click `"Yes"` 20 | Make sure that the `.apt_generated/` folder is in your project root. It should contain files like `YOURACTIVITY$$ViewInjector.java`. If these files are not present trigger a clean build by selected `Project → Clean`. This folder and files should **not** be checked into revision control 21 | 22 | 4.still error faild? restart the Eclipse 23 | 24 | ### for IntelliJ IDEA 25 | 26 | familiar with Eclipse.Click [here](http://jakewharton.github.io/butterknife/ide-idea.html) 27 | 28 | 29 | License 30 | ======= 31 | ``` 32 | Copyright 2014 Jayin Ton 33 | 34 | Licensed under the Apache License, Version 2.0 (the "License"); 35 | you may not use this file except in compliance with the License. 36 | You may obtain a copy of the License at 37 | 38 | http://www.apache.org/licenses/LICENSE-2.0 39 | 40 | Unless required by applicable law or agreed to in writing, software 41 | distributed under the License is distributed on an "AS IS" BASIS, 42 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 43 | See the License for the specific language governing permissions and 44 | limitations under the License. 45 | 46 | ``` 47 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/keystore -------------------------------------------------------------------------------- /app/libs/gson-2.3.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/libs/gson-2.3.1.jar -------------------------------------------------------------------------------- /app/libs/umeng-analytics-v5.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/libs/umeng-analytics-v5.6.4.jar -------------------------------------------------------------------------------- /app/libs/zip4j_1.3.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/libs/zip4j_1.3.2.jar -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/jayin/jayin/App/adt-bundle-mac-x86_64-20140702/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/io/github/emanual/app/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/assets/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 请求失败 5 | 6 | 8 | 9 | 19 | 20 |
21 |

22 | 请求失败,刷新重试看看 23 |

24 | 25 |

26 | o(╯□╰)o 27 |

28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/assets/404.md: -------------------------------------------------------------------------------- 1 | 哎呀,出错了! 2 | --------- 3 | 4 | 5 | ### 可能原因: 6 | 7 | * 访问的资源已经被删除 8 | * 网络不稳定 9 | * 尚未接入互联网 10 | * 网络链接地址不正确 11 | * 安全软件禁止访问网络 12 | 13 | ### Tips: 14 | 15 | **下拉即可刷新页面** 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/assets/bootstrap/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/bootstrap/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /app/src/main/assets/bootstrap/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/bootstrap/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /app/src/main/assets/css/common.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/css/common.css -------------------------------------------------------------------------------- /app/src/main/assets/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /app/src/main/assets/forum/css/font-awesome/css/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/forum/css/font-awesome/css/FontAwesome.otf -------------------------------------------------------------------------------- /app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.eot -------------------------------------------------------------------------------- /app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.woff -------------------------------------------------------------------------------- /app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/forum/css/font-awesome/css/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /app/src/main/assets/forum/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 问答 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/assets/img/binding_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/img/binding_dark.png -------------------------------------------------------------------------------- /app/src/main/assets/img/brushed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/img/brushed.png -------------------------------------------------------------------------------- /app/src/main/assets/img/graphy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/img/graphy.png -------------------------------------------------------------------------------- /app/src/main/assets/img/sandpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/img/sandpaper.png -------------------------------------------------------------------------------- /app/src/main/assets/preview-question/css/main.css: -------------------------------------------------------------------------------- 1 | /*https://github.com/sindresorhus/github-markdown-css*/ 2 | .markdown-body { 3 | box-sizing: border-box; 4 | min-width: 200px; 5 | max-width: 980px; 6 | margin: 0 auto; 7 | } 8 | /*让段落铺满再换行*/ 9 | p { 10 | word-break: break-all; 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/assets/preview-question/script/main.js: -------------------------------------------------------------------------------- 1 | (function(window, $) { 2 | $(document).ready(function() { 3 | var selector_title = $('title'); 4 | var selector_description = $('#question_description') 5 | var selector_option_container = $('#option-container') 6 | var select_tpl_option = $('#tpl_option') 7 | var select_question_answer = $('#question_answer') 8 | /** 9 | * 渲染题目 10 | */ 11 | window.updateQuestion = function(question) { 12 | //渲染描述 13 | selector_description.html(question.description) 14 | selector_title.html(selector_description.text()) 15 | 16 | if (question.type === 'choice') { 17 | var options = [] 18 | question.options.forEach(function(option, index) { 19 | options.push(select_tpl_option.html().replace(/{{option_id}}/g, 'option_' + index).replace(/{{option_description}}/g, option)) 20 | }) 21 | selector_option_container.html(options.join('')) 22 | } 23 | //渲染答案 24 | var answer_wrapper = '

参考答案:

'; 25 | question.answer = answer_wrapper + (question.answer || '无') 26 | select_question_answer.html(question.answer) 27 | } 28 | /** 29 | * @return array 已选择的东西列表 30 | */ 31 | window.getUserAnswer = function() { 32 | var checkeds = [] 33 | $('#option-container input').forEach(function(input, index) { 34 | if ($(input)[0].checked) { 35 | checkeds.push(index) 36 | } 37 | }) 38 | return checkeds 39 | } 40 | }) 41 | })(window, Zepto); 42 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/ascetic.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; padding: 0.5em; 9 | background: white; color: black; 10 | } 11 | 12 | .hljs-string, 13 | .hljs-tag .hljs-value, 14 | .hljs-filter .hljs-argument, 15 | .hljs-addition, 16 | .hljs-change, 17 | .apache .hljs-tag, 18 | .apache .hljs-cbracket, 19 | .nginx .hljs-built_in, 20 | .tex .hljs-formula { 21 | color: #888; 22 | } 23 | 24 | .hljs-comment, 25 | .hljs-template_comment, 26 | .hljs-shebang, 27 | .hljs-doctype, 28 | .hljs-pi, 29 | .hljs-javadoc, 30 | .hljs-deletion, 31 | .apache .hljs-sqbracket { 32 | color: #CCC; 33 | } 34 | 35 | .hljs-keyword, 36 | .hljs-tag .hljs-title, 37 | .ini .hljs-title, 38 | .lisp .hljs-title, 39 | .clojure .hljs-title, 40 | .http .hljs-title, 41 | .nginx .hljs-title, 42 | .css .hljs-tag, 43 | .hljs-winutils, 44 | .hljs-flow, 45 | .apache .hljs-tag, 46 | .tex .hljs-command, 47 | .hljs-request, 48 | .hljs-status { 49 | font-weight: bold; 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-dune.dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Dune Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Dune Dark Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #999580; 10 | } 11 | 12 | /* Atelier Dune Dark Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #d73737; 26 | } 27 | 28 | /* Atelier Dune Dark Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #b65611; 37 | } 38 | 39 | /* Atelier Dune Dark Yellow */ 40 | .ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #cfb017; 43 | } 44 | 45 | /* Atelier Dune Dark Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #60ac39; 53 | } 54 | 55 | /* Atelier Dune Dark Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #1fad83; 58 | } 59 | 60 | /* Atelier Dune Dark Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #6684e1; 70 | } 71 | 72 | /* Atelier Dune Dark Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #b854d4; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #292824; 81 | color: #a6a28c; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-dune.light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Dune Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Dune Light Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #7d7a68; 10 | } 11 | 12 | /* Atelier Dune Light Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #d73737; 26 | } 27 | 28 | /* Atelier Dune Light Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #b65611; 37 | } 38 | 39 | /* Atelier Dune Light Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #cfb017; 43 | } 44 | 45 | /* Atelier Dune Light Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #60ac39; 53 | } 54 | 55 | /* Atelier Dune Light Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #1fad83; 58 | } 59 | 60 | /* Atelier Dune Light Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #6684e1; 70 | } 71 | 72 | /* Atelier Dune Light Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #b854d4; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #fefbec; 81 | color: #6e6b5e; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-forest.dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Forest Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Forest Dark Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #9c9491; 10 | } 11 | 12 | /* Atelier Forest Dark Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #f22c40; 26 | } 27 | 28 | /* Atelier Forest Dark Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #df5320; 37 | } 38 | 39 | /* Atelier Forest Dark Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #d5911a; 43 | } 44 | 45 | /* Atelier Forest Dark Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #5ab738; 53 | } 54 | 55 | /* Atelier Forest Dark Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #00ad9c; 58 | } 59 | 60 | /* Atelier Forest Dark Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #407ee7; 70 | } 71 | 72 | /* Atelier Forest Dark Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #6666ea; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #2c2421; 81 | color: #a8a19f; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-forest.light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Forest Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Forest Light Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #766e6b; 10 | } 11 | 12 | /* Atelier Forest Light Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #f22c40; 26 | } 27 | 28 | /* Atelier Forest Light Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #df5320; 37 | } 38 | 39 | /* Atelier Forest Light Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #d5911a; 43 | } 44 | 45 | /* Atelier Forest Light Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #5ab738; 53 | } 54 | 55 | /* Atelier Forest Light Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #00ad9c; 58 | } 59 | 60 | /* Atelier Forest Light Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #407ee7; 70 | } 71 | 72 | /* Atelier Forest Light Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #6666ea; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #f1efee; 81 | color: #68615e; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-heath.dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Heath Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Heath Dark Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #9e8f9e; 10 | } 11 | 12 | /* Atelier Heath Dark Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #ca402b; 26 | } 27 | 28 | /* Atelier Heath Dark Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #a65926; 37 | } 38 | 39 | /* Atelier Heath Dark Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #bb8a35; 43 | } 44 | 45 | /* Atelier Heath Dark Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #379a37; 53 | } 54 | 55 | /* Atelier Heath Dark Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #159393; 58 | } 59 | 60 | /* Atelier Heath Dark Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #516aec; 70 | } 71 | 72 | /* Atelier Heath Dark Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #7b59c0; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #292329; 81 | color: #ab9bab; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-heath.light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Heath Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Heath Light Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #776977; 10 | } 11 | 12 | /* Atelier Heath Light Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #ca402b; 26 | } 27 | 28 | /* Atelier Heath Light Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #a65926; 37 | } 38 | 39 | /* Atelier Heath Light Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #bb8a35; 43 | } 44 | 45 | /* Atelier Heath Light Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #379a37; 53 | } 54 | 55 | /* Atelier Heath Light Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #159393; 58 | } 59 | 60 | /* Atelier Heath Light Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #516aec; 70 | } 71 | 72 | /* Atelier Heath Light Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #7b59c0; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #f7f3f7; 81 | color: #695d69; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-lakeside.dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Lakeside Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Lakeside Dark Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #7195a8; 10 | } 11 | 12 | /* Atelier Lakeside Dark Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #d22d72; 26 | } 27 | 28 | /* Atelier Lakeside Dark Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #935c25; 37 | } 38 | 39 | /* Atelier Lakeside Dark Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #8a8a0f; 43 | } 44 | 45 | /* Atelier Lakeside Dark Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #568c3b; 53 | } 54 | 55 | /* Atelier Lakeside Dark Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #2d8f6f; 58 | } 59 | 60 | /* Atelier Lakeside Dark Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #257fad; 70 | } 71 | 72 | /* Atelier Lakeside Dark Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #5d5db1; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #1f292e; 81 | color: #7ea2b4; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-lakeside.light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Lakeside Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Lakeside Light Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #5a7b8c; 10 | } 11 | 12 | /* Atelier Lakeside Light Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #d22d72; 26 | } 27 | 28 | /* Atelier Lakeside Light Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #935c25; 37 | } 38 | 39 | /* Atelier Lakeside Light Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #8a8a0f; 43 | } 44 | 45 | /* Atelier Lakeside Light Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #568c3b; 53 | } 54 | 55 | /* Atelier Lakeside Light Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #2d8f6f; 58 | } 59 | 60 | /* Atelier Lakeside Light Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #257fad; 70 | } 71 | 72 | /* Atelier Lakeside Light Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #5d5db1; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #ebf8ff; 81 | color: #516d7b; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-seaside.dark.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Seaside Dark - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Seaside Dark Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #809980; 10 | } 11 | 12 | /* Atelier Seaside Dark Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #e6193c; 26 | } 27 | 28 | /* Atelier Seaside Dark Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #87711d; 37 | } 38 | 39 | /* Atelier Seaside Dark Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #c3c322; 43 | } 44 | 45 | /* Atelier Seaside Dark Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #29a329; 53 | } 54 | 55 | /* Atelier Seaside Dark Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #1999b3; 58 | } 59 | 60 | /* Atelier Seaside Dark Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #3d62f5; 70 | } 71 | 72 | /* Atelier Seaside Dark Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #ad2bee; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #242924; 81 | color: #8ca68c; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/atelier-seaside.light.css: -------------------------------------------------------------------------------- 1 | /* Base16 Atelier Seaside Light - Theme */ 2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/) */ 3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ 4 | /* https://github.com/jmblog/color-themes-for-highlightjs */ 5 | 6 | /* Atelier Seaside Light Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #687d68; 10 | } 11 | 12 | /* Atelier Seaside Light Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #e6193c; 26 | } 27 | 28 | /* Atelier Seaside Light Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #87711d; 37 | } 38 | 39 | /* Atelier Seaside Light Yellow */ 40 | .hljs-ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #c3c322; 43 | } 44 | 45 | /* Atelier Seaside Light Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #29a329; 53 | } 54 | 55 | /* Atelier Seaside Light Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #1999b3; 58 | } 59 | 60 | /* Atelier Seaside Light Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #3d62f5; 70 | } 71 | 72 | /* Atelier Seaside Light Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #ad2bee; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #f0fff0; 81 | color: #5e6e5e; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/brown_papersq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/styles/brown_papersq.png -------------------------------------------------------------------------------- /app/src/main/assets/styles/foundation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Description: Foundation 4 docs style for highlight.js 3 | Author: Dan Allen 4 | Website: http://foundation.zurb.com/docs/ 5 | Version: 1.0 6 | Date: 2013-04-02 7 | */ 8 | 9 | .hljs { 10 | display: block; padding: 0.5em; 11 | background: #eee; 12 | } 13 | 14 | .hljs-header, 15 | .hljs-decorator, 16 | .hljs-annotation { 17 | color: #000077; 18 | } 19 | 20 | .hljs-horizontal_rule, 21 | .hljs-link_url, 22 | .hljs-emphasis, 23 | .hljs-attribute { 24 | color: #070; 25 | } 26 | 27 | .hljs-emphasis { 28 | font-style: italic; 29 | } 30 | 31 | .hljs-link_label, 32 | .hljs-strong, 33 | .hljs-value, 34 | .hljs-string, 35 | .scss .hljs-value .hljs-string { 36 | color: #d14; 37 | } 38 | 39 | .hljs-strong { 40 | font-weight: bold; 41 | } 42 | 43 | .hljs-blockquote, 44 | .hljs-comment { 45 | color: #998; 46 | font-style: italic; 47 | } 48 | 49 | .asciidoc .hljs-title, 50 | .hljs-function .hljs-title { 51 | color: #900; 52 | } 53 | 54 | .hljs-class { 55 | color: #458; 56 | } 57 | 58 | .hljs-id, 59 | .hljs-pseudo, 60 | .hljs-constant, 61 | .hljs-hexcolor { 62 | color: teal; 63 | } 64 | 65 | .hljs-variable { 66 | color: #336699; 67 | } 68 | 69 | .hljs-bullet, 70 | .hljs-javadoc { 71 | color: #997700; 72 | } 73 | 74 | .hljs-pi, 75 | .hljs-doctype { 76 | color: #3344bb; 77 | } 78 | 79 | .hljs-code, 80 | .hljs-number { 81 | color: #099; 82 | } 83 | 84 | .hljs-important { 85 | color: #f00; 86 | } 87 | 88 | .smartquote, 89 | .hljs-label { 90 | color: #970; 91 | } 92 | 93 | .hljs-preprocessor, 94 | .hljs-pragma { 95 | color: #579; 96 | } 97 | 98 | .hljs-reserved, 99 | .hljs-keyword, 100 | .scss .hljs-value { 101 | color: #000; 102 | } 103 | 104 | .hljs-regexp { 105 | background-color: #fff0ff; 106 | color: #880088; 107 | } 108 | 109 | .hljs-symbol { 110 | color: #990073; 111 | } 112 | 113 | .hljs-symbol .hljs-string { 114 | color: #a60; 115 | } 116 | 117 | .hljs-tag { 118 | color: #007700; 119 | } 120 | 121 | .hljs-at_rule, 122 | .hljs-at_rule .hljs-keyword { 123 | color: #088; 124 | } 125 | 126 | .hljs-at_rule .hljs-preprocessor { 127 | color: #808; 128 | } 129 | 130 | .scss .hljs-tag, 131 | .scss .hljs-attribute { 132 | color: #339; 133 | } 134 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/ir_black.css: -------------------------------------------------------------------------------- 1 | /* 2 | IR_Black style (c) Vasily Mikhailitchenko 3 | */ 4 | 5 | .hljs { 6 | display: block; padding: 0.5em; 7 | background: #000; color: #f8f8f8; 8 | } 9 | 10 | .hljs-shebang, 11 | .hljs-comment, 12 | .hljs-template_comment, 13 | .hljs-javadoc { 14 | color: #7c7c7c; 15 | } 16 | 17 | .hljs-keyword, 18 | .hljs-tag, 19 | .tex .hljs-command, 20 | .hljs-request, 21 | .hljs-status, 22 | .clojure .hljs-attribute { 23 | color: #96CBFE; 24 | } 25 | 26 | .hljs-sub .hljs-keyword, 27 | .method, 28 | .hljs-list .hljs-title, 29 | .nginx .hljs-title { 30 | color: #FFFFB6; 31 | } 32 | 33 | .hljs-string, 34 | .hljs-tag .hljs-value, 35 | .hljs-cdata, 36 | .hljs-filter .hljs-argument, 37 | .hljs-attr_selector, 38 | .apache .hljs-cbracket, 39 | .hljs-date, 40 | .coffeescript .hljs-attribute { 41 | color: #A8FF60; 42 | } 43 | 44 | .hljs-subst { 45 | color: #DAEFA3; 46 | } 47 | 48 | .hljs-regexp { 49 | color: #E9C062; 50 | } 51 | 52 | .hljs-title, 53 | .hljs-sub .hljs-identifier, 54 | .hljs-pi, 55 | .hljs-decorator, 56 | .tex .hljs-special, 57 | .haskell .hljs-type, 58 | .hljs-constant, 59 | .smalltalk .hljs-class, 60 | .hljs-javadoctag, 61 | .hljs-yardoctag, 62 | .hljs-phpdoc, 63 | .nginx .hljs-built_in { 64 | color: #FFFFB6; 65 | } 66 | 67 | .hljs-symbol, 68 | .ruby .hljs-symbol .hljs-string, 69 | .hljs-number, 70 | .hljs-variable, 71 | .vbscript, 72 | .hljs-literal { 73 | color: #C6C5FE; 74 | } 75 | 76 | .css .hljs-tag { 77 | color: #96CBFE; 78 | } 79 | 80 | .css .hljs-rules .hljs-property, 81 | .css .hljs-id { 82 | color: #FFFFB6; 83 | } 84 | 85 | .css .hljs-class { 86 | color: #FFF; 87 | } 88 | 89 | .hljs-hexcolor { 90 | color: #C6C5FE; 91 | } 92 | 93 | .hljs-number { 94 | color:#FF73FD; 95 | } 96 | 97 | .coffeescript .javascript, 98 | .javascript .xml, 99 | .tex .hljs-formula, 100 | .xml .javascript, 101 | .xml .vbscript, 102 | .xml .css, 103 | .xml .hljs-cdata { 104 | opacity: 0.7; 105 | } 106 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/mono-blue.css: -------------------------------------------------------------------------------- 1 | /* 2 | Five-color theme from a single blue hue. 3 | */ 4 | .hljs { 5 | display: block; padding: 0.5em; 6 | background: #EAEEF3; color: #00193A; 7 | } 8 | 9 | .hljs-keyword, 10 | .hljs-title, 11 | .hljs-important, 12 | .hljs-request, 13 | .hljs-header, 14 | .hljs-javadoctag { 15 | font-weight: bold; 16 | } 17 | 18 | .hljs-comment, 19 | .hljs-chunk, 20 | .hljs-template_comment { 21 | color: #738191; 22 | } 23 | 24 | .hljs-string, 25 | .hljs-title, 26 | .hljs-parent, 27 | .hljs-built_in, 28 | .hljs-literal, 29 | .hljs-filename, 30 | .hljs-value, 31 | .hljs-addition, 32 | .hljs-tag, 33 | .hljs-argument, 34 | .hljs-link_label, 35 | .hljs-blockquote, 36 | .hljs-header { 37 | color: #0048AB; 38 | } 39 | 40 | .hljs-decorator, 41 | .hljs-prompt, 42 | .hljs-yardoctag, 43 | .hljs-subst, 44 | .hljs-symbol, 45 | .hljs-doctype, 46 | .hljs-regexp, 47 | .hljs-preprocessor, 48 | .hljs-pragma, 49 | .hljs-pi, 50 | .hljs-attribute, 51 | .hljs-attr_selector, 52 | .hljs-javadoc, 53 | .hljs-xmlDocTag, 54 | .hljs-deletion, 55 | .hljs-shebang, 56 | .hljs-string .hljs-variable, 57 | .hljs-link_url, 58 | .hljs-bullet, 59 | .hljs-sqbracket, 60 | .hljs-phony { 61 | color: #4C81C9; 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/paraiso.dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | Paraíso (dark) 3 | Created by Jan T. Sott (http://github.com/idleberg) 4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 5 | */ 6 | 7 | /* Paraíso Comment */ 8 | .hljs-comment, 9 | .hljs-title { 10 | color: #8d8687; 11 | } 12 | 13 | /* Paraíso Red */ 14 | .hljs-variable, 15 | .hljs-attribute, 16 | .hljs-tag, 17 | .hljs-regexp, 18 | .ruby .hljs-constant, 19 | .xml .hljs-tag .hljs-title, 20 | .xml .hljs-pi, 21 | .xml .hljs-doctype, 22 | .html .hljs-doctype, 23 | .css .hljs-id, 24 | .css .hljs-class, 25 | .css .hljs-pseudo { 26 | color: #ef6155; 27 | } 28 | 29 | /* Paraíso Orange */ 30 | .hljs-number, 31 | .hljs-preprocessor, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #f99b15; 37 | } 38 | 39 | /* Paraíso Yellow */ 40 | .ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #fec418; 43 | } 44 | 45 | /* Paraíso Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #48b685; 53 | } 54 | 55 | /* Paraíso Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #5bc4bf; 58 | } 59 | 60 | /* Paraíso Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #06b6ef; 70 | } 71 | 72 | /* Paraíso Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #815ba4; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #2f1e2e; 81 | color: #a39e9b; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/paraiso.light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Paraíso (light) 3 | Created by Jan T. Sott (http://github.com/idleberg) 4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 5 | */ 6 | 7 | /* Paraíso Comment */ 8 | .hljs-comment, 9 | .hljs-title { 10 | color: #776e71; 11 | } 12 | 13 | /* Paraíso Red */ 14 | .hljs-variable, 15 | .hljs-attribute, 16 | .hljs-tag, 17 | .hljs-regexp, 18 | .ruby .hljs-constant, 19 | .xml .hljs-tag .hljs-title, 20 | .xml .hljs-pi, 21 | .xml .hljs-doctype, 22 | .html .hljs-doctype, 23 | .css .hljs-id, 24 | .css .hljs-class, 25 | .css .hljs-pseudo { 26 | color: #ef6155; 27 | } 28 | 29 | /* Paraíso Orange */ 30 | .hljs-number, 31 | .hljs-preprocessor, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #f99b15; 37 | } 38 | 39 | /* Paraíso Yellow */ 40 | .ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #fec418; 43 | } 44 | 45 | /* Paraíso Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #48b685; 53 | } 54 | 55 | /* Paraíso Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #5bc4bf; 58 | } 59 | 60 | /* Paraíso Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #06b6ef; 70 | } 71 | 72 | /* Paraíso Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #815ba4; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #e7e9db; 81 | color: #4f424c; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/pojoaque.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Pojoaque Style by Jason Tate 4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html 5 | Based on Solarized Style from http://ethanschoonover.com/solarized 6 | 7 | */ 8 | 9 | .hljs { 10 | display: block; padding: 0.5em; 11 | color: #DCCF8F; 12 | background: url(./pojoaque.jpg) repeat scroll left top #181914; 13 | } 14 | 15 | .hljs-comment, 16 | .hljs-template_comment, 17 | .diff .hljs-header, 18 | .hljs-doctype, 19 | .lisp .hljs-string, 20 | .hljs-javadoc { 21 | color: #586e75; 22 | font-style: italic; 23 | } 24 | 25 | .hljs-keyword, 26 | .css .rule .hljs-keyword, 27 | .hljs-winutils, 28 | .javascript .hljs-title, 29 | .method, 30 | .hljs-addition, 31 | .css .hljs-tag, 32 | .clojure .hljs-title, 33 | .nginx .hljs-title { 34 | color: #B64926; 35 | } 36 | 37 | .hljs-number, 38 | .hljs-command, 39 | .hljs-string, 40 | .hljs-tag .hljs-value, 41 | .hljs-phpdoc, 42 | .tex .hljs-formula, 43 | .hljs-regexp, 44 | .hljs-hexcolor { 45 | color: #468966; 46 | } 47 | 48 | .hljs-title, 49 | .hljs-localvars, 50 | .hljs-function .hljs-title, 51 | .hljs-chunk, 52 | .hljs-decorator, 53 | .hljs-built_in, 54 | .lisp .hljs-title, 55 | .clojure .hljs-built_in, 56 | .hljs-identifier, 57 | .hljs-id { 58 | color: #FFB03B; 59 | } 60 | 61 | .hljs-attribute, 62 | .hljs-variable, 63 | .lisp .hljs-body, 64 | .smalltalk .hljs-number, 65 | .hljs-constant, 66 | .hljs-class .hljs-title, 67 | .hljs-parent, 68 | .haskell .hljs-type { 69 | color: #b58900; 70 | } 71 | 72 | .css .hljs-attribute { 73 | color: #b89859; 74 | } 75 | 76 | .css .hljs-number, 77 | .css .hljs-hexcolor { 78 | color: #DCCF8F; 79 | } 80 | 81 | .css .hljs-class { 82 | color: #d3a60c; 83 | } 84 | 85 | .hljs-preprocessor, 86 | .hljs-pragma, 87 | .hljs-pi, 88 | .hljs-shebang, 89 | .hljs-symbol, 90 | .hljs-symbol .hljs-string, 91 | .diff .hljs-change, 92 | .hljs-special, 93 | .hljs-attr_selector, 94 | .hljs-important, 95 | .hljs-subst, 96 | .hljs-cdata { 97 | color: #cb4b16; 98 | } 99 | 100 | .hljs-deletion { 101 | color: #dc322f; 102 | } 103 | 104 | .tex .hljs-formula { 105 | background: #073642; 106 | } 107 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/pojoaque.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/styles/pojoaque.jpg -------------------------------------------------------------------------------- /app/src/main/assets/styles/rainbow.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Style with support for rainbow parens 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; padding: 0.5em; 9 | background: #474949; color: #D1D9E1; 10 | } 11 | 12 | 13 | .hljs-body, 14 | .hljs-collection { 15 | color: #D1D9E1; 16 | } 17 | 18 | .hljs-comment, 19 | .hljs-template_comment, 20 | .diff .hljs-header, 21 | .hljs-doctype, 22 | .lisp .hljs-string, 23 | .hljs-javadoc { 24 | color: #969896; 25 | font-style: italic; 26 | } 27 | 28 | .hljs-keyword, 29 | .clojure .hljs-attribute, 30 | .hljs-winutils, 31 | .javascript .hljs-title, 32 | .hljs-addition, 33 | .css .hljs-tag { 34 | color: #cc99cc; 35 | } 36 | 37 | .hljs-number { color: #f99157; } 38 | 39 | .hljs-command, 40 | .hljs-string, 41 | .hljs-tag .hljs-value, 42 | .hljs-phpdoc, 43 | .tex .hljs-formula, 44 | .hljs-regexp, 45 | .hljs-hexcolor { 46 | color: #8abeb7; 47 | } 48 | 49 | .hljs-title, 50 | .hljs-localvars, 51 | .hljs-function .hljs-title, 52 | .hljs-chunk, 53 | .hljs-decorator, 54 | .hljs-built_in, 55 | .lisp .hljs-title, 56 | .hljs-identifier 57 | { 58 | color: #b5bd68; 59 | } 60 | 61 | .hljs-class .hljs-keyword 62 | { 63 | color: #f2777a; 64 | } 65 | 66 | .hljs-variable, 67 | .lisp .hljs-body, 68 | .smalltalk .hljs-number, 69 | .hljs-constant, 70 | .hljs-class .hljs-title, 71 | .hljs-parent, 72 | .haskell .hljs-label, 73 | .hljs-id, 74 | .lisp .hljs-title, 75 | .clojure .hljs-title .hljs-built_in { 76 | color: #ffcc66; 77 | } 78 | 79 | .hljs-tag .hljs-title, 80 | .hljs-rules .hljs-property, 81 | .django .hljs-tag .hljs-keyword, 82 | .clojure .hljs-title .hljs-built_in { 83 | font-weight: bold; 84 | } 85 | 86 | .hljs-attribute, 87 | .clojure .hljs-title { 88 | color: #81a2be; 89 | } 90 | 91 | .hljs-preprocessor, 92 | .hljs-pragma, 93 | .hljs-pi, 94 | .hljs-shebang, 95 | .hljs-symbol, 96 | .hljs-symbol .hljs-string, 97 | .diff .hljs-change, 98 | .hljs-special, 99 | .hljs-attr_selector, 100 | .hljs-important, 101 | .hljs-subst, 102 | .hljs-cdata { 103 | color: #f99157; 104 | } 105 | 106 | .hljs-deletion { 107 | color: #dc322f; 108 | } 109 | 110 | .tex .hljs-formula { 111 | background: #eee8d5; 112 | } 113 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/school_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/assets/styles/school_book.png -------------------------------------------------------------------------------- /app/src/main/assets/styles/solarized_dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | padding: 0.5em; 10 | background: #002b36; 11 | color: #839496; 12 | } 13 | 14 | .hljs-comment, 15 | .hljs-template_comment, 16 | .diff .hljs-header, 17 | .hljs-doctype, 18 | .hljs-pi, 19 | .lisp .hljs-string, 20 | .hljs-javadoc { 21 | color: #586e75; 22 | } 23 | 24 | /* Solarized Green */ 25 | .hljs-keyword, 26 | .hljs-winutils, 27 | .method, 28 | .hljs-addition, 29 | .css .hljs-tag, 30 | .hljs-request, 31 | .hljs-status, 32 | .nginx .hljs-title { 33 | color: #859900; 34 | } 35 | 36 | /* Solarized Cyan */ 37 | .hljs-number, 38 | .hljs-command, 39 | .hljs-string, 40 | .hljs-tag .hljs-value, 41 | .hljs-rules .hljs-value, 42 | .hljs-phpdoc, 43 | .tex .hljs-formula, 44 | .hljs-regexp, 45 | .hljs-hexcolor, 46 | .hljs-link_url { 47 | color: #2aa198; 48 | } 49 | 50 | /* Solarized Blue */ 51 | .hljs-title, 52 | .hljs-localvars, 53 | .hljs-chunk, 54 | .hljs-decorator, 55 | .hljs-built_in, 56 | .hljs-identifier, 57 | .vhdl .hljs-literal, 58 | .hljs-id, 59 | .css .hljs-function { 60 | color: #268bd2; 61 | } 62 | 63 | /* Solarized Yellow */ 64 | .hljs-attribute, 65 | .hljs-variable, 66 | .lisp .hljs-body, 67 | .smalltalk .hljs-number, 68 | .hljs-constant, 69 | .hljs-class .hljs-title, 70 | .hljs-parent, 71 | .haskell .hljs-type, 72 | .hljs-link_reference { 73 | color: #b58900; 74 | } 75 | 76 | /* Solarized Orange */ 77 | .hljs-preprocessor, 78 | .hljs-preprocessor .hljs-keyword, 79 | .hljs-pragma, 80 | .hljs-shebang, 81 | .hljs-symbol, 82 | .hljs-symbol .hljs-string, 83 | .diff .hljs-change, 84 | .hljs-special, 85 | .hljs-attr_selector, 86 | .hljs-subst, 87 | .hljs-cdata, 88 | .clojure .hljs-title, 89 | .css .hljs-pseudo, 90 | .hljs-header { 91 | color: #cb4b16; 92 | } 93 | 94 | /* Solarized Red */ 95 | .hljs-deletion, 96 | .hljs-important { 97 | color: #dc322f; 98 | } 99 | 100 | /* Solarized Violet */ 101 | .hljs-link_label { 102 | color: #6c71c4; 103 | } 104 | 105 | .tex .hljs-formula { 106 | background: #073642; 107 | } 108 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/solarized_light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | .hljs { 8 | display: block; 9 | padding: 0.5em; 10 | background: #fdf6e3; 11 | color: #657b83; 12 | } 13 | 14 | .hljs-comment, 15 | .hljs-template_comment, 16 | .diff .hljs-header, 17 | .hljs-doctype, 18 | .hljs-pi, 19 | .lisp .hljs-string, 20 | .hljs-javadoc { 21 | color: #93a1a1; 22 | } 23 | 24 | /* Solarized Green */ 25 | .hljs-keyword, 26 | .hljs-winutils, 27 | .method, 28 | .hljs-addition, 29 | .css .hljs-tag, 30 | .hljs-request, 31 | .hljs-status, 32 | .nginx .hljs-title { 33 | color: #859900; 34 | } 35 | 36 | /* Solarized Cyan */ 37 | .hljs-number, 38 | .hljs-command, 39 | .hljs-string, 40 | .hljs-tag .hljs-value, 41 | .hljs-rules .hljs-value, 42 | .hljs-phpdoc, 43 | .tex .hljs-formula, 44 | .hljs-regexp, 45 | .hljs-hexcolor, 46 | .hljs-link_url { 47 | color: #2aa198; 48 | } 49 | 50 | /* Solarized Blue */ 51 | .hljs-title, 52 | .hljs-localvars, 53 | .hljs-chunk, 54 | .hljs-decorator, 55 | .hljs-built_in, 56 | .hljs-identifier, 57 | .vhdl .hljs-literal, 58 | .hljs-id, 59 | .css .hljs-function { 60 | color: #268bd2; 61 | } 62 | 63 | /* Solarized Yellow */ 64 | .hljs-attribute, 65 | .hljs-variable, 66 | .lisp .hljs-body, 67 | .smalltalk .hljs-number, 68 | .hljs-constant, 69 | .hljs-class .hljs-title, 70 | .hljs-parent, 71 | .haskell .hljs-type, 72 | .hljs-link_reference { 73 | color: #b58900; 74 | } 75 | 76 | /* Solarized Orange */ 77 | .hljs-preprocessor, 78 | .hljs-preprocessor .hljs-keyword, 79 | .hljs-pragma, 80 | .hljs-shebang, 81 | .hljs-symbol, 82 | .hljs-symbol .hljs-string, 83 | .diff .hljs-change, 84 | .hljs-special, 85 | .hljs-attr_selector, 86 | .hljs-subst, 87 | .hljs-cdata, 88 | .clojure .hljs-title, 89 | .css .hljs-pseudo, 90 | .hljs-header { 91 | color: #cb4b16; 92 | } 93 | 94 | /* Solarized Red */ 95 | .hljs-deletion, 96 | .hljs-important { 97 | color: #dc322f; 98 | } 99 | 100 | /* Solarized Violet */ 101 | .hljs-link_label { 102 | color: #6c71c4; 103 | } 104 | 105 | .tex .hljs-formula { 106 | background: #eee8d5; 107 | } 108 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/tomorrow-night-blue.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Blue Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | 6 | /* Tomorrow Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #7285b7; 10 | } 11 | 12 | /* Tomorrow Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #ff9da4; 26 | } 27 | 28 | /* Tomorrow Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #ffc58f; 37 | } 38 | 39 | /* Tomorrow Yellow */ 40 | .ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #ffeead; 43 | } 44 | 45 | /* Tomorrow Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #d1f1a9; 53 | } 54 | 55 | /* Tomorrow Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #99ffff; 58 | } 59 | 60 | /* Tomorrow Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #bbdaff; 70 | } 71 | 72 | /* Tomorrow Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #ebbbff; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #002451; 81 | color: white; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Bright Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | 5 | /* Tomorrow Comment */ 6 | .hljs-comment, 7 | .hljs-title { 8 | color: #969896; 9 | } 10 | 11 | /* Tomorrow Red */ 12 | .hljs-variable, 13 | .hljs-attribute, 14 | .hljs-tag, 15 | .hljs-regexp, 16 | .ruby .hljs-constant, 17 | .xml .hljs-tag .hljs-title, 18 | .xml .hljs-pi, 19 | .xml .hljs-doctype, 20 | .html .hljs-doctype, 21 | .css .hljs-id, 22 | .css .hljs-class, 23 | .css .hljs-pseudo { 24 | color: #d54e53; 25 | } 26 | 27 | /* Tomorrow Orange */ 28 | .hljs-number, 29 | .hljs-preprocessor, 30 | .hljs-pragma, 31 | .hljs-built_in, 32 | .hljs-literal, 33 | .hljs-params, 34 | .hljs-constant { 35 | color: #e78c45; 36 | } 37 | 38 | /* Tomorrow Yellow */ 39 | .ruby .hljs-class .hljs-title, 40 | .css .hljs-rules .hljs-attribute { 41 | color: #e7c547; 42 | } 43 | 44 | /* Tomorrow Green */ 45 | .hljs-string, 46 | .hljs-value, 47 | .hljs-inheritance, 48 | .hljs-header, 49 | .ruby .hljs-symbol, 50 | .xml .hljs-cdata { 51 | color: #b9ca4a; 52 | } 53 | 54 | /* Tomorrow Aqua */ 55 | .css .hljs-hexcolor { 56 | color: #70c0b1; 57 | } 58 | 59 | /* Tomorrow Blue */ 60 | .hljs-function, 61 | .python .hljs-decorator, 62 | .python .hljs-title, 63 | .ruby .hljs-function .hljs-title, 64 | .ruby .hljs-title .hljs-keyword, 65 | .perl .hljs-sub, 66 | .javascript .hljs-title, 67 | .coffeescript .hljs-title { 68 | color: #7aa6da; 69 | } 70 | 71 | /* Tomorrow Purple */ 72 | .hljs-keyword, 73 | .javascript .hljs-function { 74 | color: #c397d8; 75 | } 76 | 77 | .hljs { 78 | display: block; 79 | background: black; 80 | color: #eaeaea; 81 | padding: 0.5em; 82 | } 83 | 84 | .coffeescript .javascript, 85 | .javascript .xml, 86 | .tex .hljs-formula, 87 | .xml .javascript, 88 | .xml .vbscript, 89 | .xml .css, 90 | .xml .hljs-cdata { 91 | opacity: 0.5; 92 | } 93 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/tomorrow-night-eighties.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Eighties Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | 5 | /* Tomorrow Comment */ 6 | .hljs-comment, 7 | .hljs-title { 8 | color: #999999; 9 | } 10 | 11 | /* Tomorrow Red */ 12 | .hljs-variable, 13 | .hljs-attribute, 14 | .hljs-tag, 15 | .hljs-regexp, 16 | .ruby .hljs-constant, 17 | .xml .hljs-tag .hljs-title, 18 | .xml .hljs-pi, 19 | .xml .hljs-doctype, 20 | .html .hljs-doctype, 21 | .css .hljs-id, 22 | .css .hljs-class, 23 | .css .hljs-pseudo { 24 | color: #f2777a; 25 | } 26 | 27 | /* Tomorrow Orange */ 28 | .hljs-number, 29 | .hljs-preprocessor, 30 | .hljs-pragma, 31 | .hljs-built_in, 32 | .hljs-literal, 33 | .hljs-params, 34 | .hljs-constant { 35 | color: #f99157; 36 | } 37 | 38 | /* Tomorrow Yellow */ 39 | .ruby .hljs-class .hljs-title, 40 | .css .hljs-rules .hljs-attribute { 41 | color: #ffcc66; 42 | } 43 | 44 | /* Tomorrow Green */ 45 | .hljs-string, 46 | .hljs-value, 47 | .hljs-inheritance, 48 | .hljs-header, 49 | .ruby .hljs-symbol, 50 | .xml .hljs-cdata { 51 | color: #99cc99; 52 | } 53 | 54 | /* Tomorrow Aqua */ 55 | .css .hljs-hexcolor { 56 | color: #66cccc; 57 | } 58 | 59 | /* Tomorrow Blue */ 60 | .hljs-function, 61 | .python .hljs-decorator, 62 | .python .hljs-title, 63 | .ruby .hljs-function .hljs-title, 64 | .ruby .hljs-title .hljs-keyword, 65 | .perl .hljs-sub, 66 | .javascript .hljs-title, 67 | .coffeescript .hljs-title { 68 | color: #6699cc; 69 | } 70 | 71 | /* Tomorrow Purple */ 72 | .hljs-keyword, 73 | .javascript .hljs-function { 74 | color: #cc99cc; 75 | } 76 | 77 | .hljs { 78 | display: block; 79 | background: #2d2d2d; 80 | color: #cccccc; 81 | padding: 0.5em; 82 | } 83 | 84 | .coffeescript .javascript, 85 | .javascript .xml, 86 | .tex .hljs-formula, 87 | .xml .javascript, 88 | .xml .vbscript, 89 | .xml .css, 90 | .xml .hljs-cdata { 91 | opacity: 0.5; 92 | } 93 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/tomorrow-night.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | 6 | /* Tomorrow Comment */ 7 | .hljs-comment, 8 | .hljs-title { 9 | color: #969896; 10 | } 11 | 12 | /* Tomorrow Red */ 13 | .hljs-variable, 14 | .hljs-attribute, 15 | .hljs-tag, 16 | .hljs-regexp, 17 | .ruby .hljs-constant, 18 | .xml .hljs-tag .hljs-title, 19 | .xml .hljs-pi, 20 | .xml .hljs-doctype, 21 | .html .hljs-doctype, 22 | .css .hljs-id, 23 | .css .hljs-class, 24 | .css .hljs-pseudo { 25 | color: #cc6666; 26 | } 27 | 28 | /* Tomorrow Orange */ 29 | .hljs-number, 30 | .hljs-preprocessor, 31 | .hljs-pragma, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-params, 35 | .hljs-constant { 36 | color: #de935f; 37 | } 38 | 39 | /* Tomorrow Yellow */ 40 | .ruby .hljs-class .hljs-title, 41 | .css .hljs-rules .hljs-attribute { 42 | color: #f0c674; 43 | } 44 | 45 | /* Tomorrow Green */ 46 | .hljs-string, 47 | .hljs-value, 48 | .hljs-inheritance, 49 | .hljs-header, 50 | .ruby .hljs-symbol, 51 | .xml .hljs-cdata { 52 | color: #b5bd68; 53 | } 54 | 55 | /* Tomorrow Aqua */ 56 | .css .hljs-hexcolor { 57 | color: #8abeb7; 58 | } 59 | 60 | /* Tomorrow Blue */ 61 | .hljs-function, 62 | .python .hljs-decorator, 63 | .python .hljs-title, 64 | .ruby .hljs-function .hljs-title, 65 | .ruby .hljs-title .hljs-keyword, 66 | .perl .hljs-sub, 67 | .javascript .hljs-title, 68 | .coffeescript .hljs-title { 69 | color: #81a2be; 70 | } 71 | 72 | /* Tomorrow Purple */ 73 | .hljs-keyword, 74 | .javascript .hljs-function { 75 | color: #b294bb; 76 | } 77 | 78 | .hljs { 79 | display: block; 80 | background: #1d1f21; 81 | color: #c5c8c6; 82 | padding: 0.5em; 83 | } 84 | 85 | .coffeescript .javascript, 86 | .javascript .xml, 87 | .tex .hljs-formula, 88 | .xml .javascript, 89 | .xml .vbscript, 90 | .xml .css, 91 | .xml .hljs-cdata { 92 | opacity: 0.5; 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/tomorrow.css: -------------------------------------------------------------------------------- 1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 2 | 3 | /* Tomorrow Comment */ 4 | .hljs-comment, 5 | .hljs-title { 6 | color: #8e908c; 7 | } 8 | 9 | /* Tomorrow Red */ 10 | .hljs-variable, 11 | .hljs-attribute, 12 | .hljs-tag, 13 | .hljs-regexp, 14 | .ruby .hljs-constant, 15 | .xml .hljs-tag .hljs-title, 16 | .xml .hljs-pi, 17 | .xml .hljs-doctype, 18 | .html .hljs-doctype, 19 | .css .hljs-id, 20 | .css .hljs-class, 21 | .css .hljs-pseudo { 22 | color: #c82829; 23 | } 24 | 25 | /* Tomorrow Orange */ 26 | .hljs-number, 27 | .hljs-preprocessor, 28 | .hljs-pragma, 29 | .hljs-built_in, 30 | .hljs-literal, 31 | .hljs-params, 32 | .hljs-constant { 33 | color: #f5871f; 34 | } 35 | 36 | /* Tomorrow Yellow */ 37 | .ruby .hljs-class .hljs-title, 38 | .css .hljs-rules .hljs-attribute { 39 | color: #eab700; 40 | } 41 | 42 | /* Tomorrow Green */ 43 | .hljs-string, 44 | .hljs-value, 45 | .hljs-inheritance, 46 | .hljs-header, 47 | .ruby .hljs-symbol, 48 | .xml .hljs-cdata { 49 | color: #718c00; 50 | } 51 | 52 | /* Tomorrow Aqua */ 53 | .css .hljs-hexcolor { 54 | color: #3e999f; 55 | } 56 | 57 | /* Tomorrow Blue */ 58 | .hljs-function, 59 | .python .hljs-decorator, 60 | .python .hljs-title, 61 | .ruby .hljs-function .hljs-title, 62 | .ruby .hljs-title .hljs-keyword, 63 | .perl .hljs-sub, 64 | .javascript .hljs-title, 65 | .coffeescript .hljs-title { 66 | color: #4271ae; 67 | } 68 | 69 | /* Tomorrow Purple */ 70 | .hljs-keyword, 71 | .javascript .hljs-function { 72 | color: #8959a8; 73 | } 74 | 75 | .hljs { 76 | display: block; 77 | background: white; 78 | color: #4d4d4c; 79 | padding: 0.5em; 80 | } 81 | 82 | .coffeescript .javascript, 83 | .javascript .xml, 84 | .tex .hljs-formula, 85 | .xml .javascript, 86 | .xml .vbscript, 87 | .xml .css, 88 | .xml .hljs-cdata { 89 | opacity: 0.5; 90 | } 91 | -------------------------------------------------------------------------------- /app/src/main/assets/styles/vs.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Visual Studio-like style based on original C# coloring by Jason Diamond 4 | 5 | */ 6 | .hljs { 7 | display: block; padding: 0.5em; 8 | background: white; color: black; 9 | } 10 | 11 | .hljs-comment, 12 | .hljs-annotation, 13 | .hljs-template_comment, 14 | .diff .hljs-header, 15 | .hljs-chunk, 16 | .apache .hljs-cbracket { 17 | color: #008000; 18 | } 19 | 20 | .hljs-keyword, 21 | .hljs-id, 22 | .hljs-built_in, 23 | .smalltalk .hljs-class, 24 | .hljs-winutils, 25 | .bash .hljs-variable, 26 | .tex .hljs-command, 27 | .hljs-request, 28 | .hljs-status, 29 | .nginx .hljs-title, 30 | .xml .hljs-tag, 31 | .xml .hljs-tag .hljs-value { 32 | color: #00f; 33 | } 34 | 35 | .hljs-string, 36 | .hljs-title, 37 | .hljs-parent, 38 | .hljs-tag .hljs-value, 39 | .hljs-rules .hljs-value, 40 | .hljs-rules .hljs-value .hljs-number, 41 | .ruby .hljs-symbol, 42 | .ruby .hljs-symbol .hljs-string, 43 | .hljs-aggregate, 44 | .hljs-template_tag, 45 | .django .hljs-variable, 46 | .hljs-addition, 47 | .hljs-flow, 48 | .hljs-stream, 49 | .apache .hljs-tag, 50 | .hljs-date, 51 | .tex .hljs-formula, 52 | .coffeescript .hljs-attribute { 53 | color: #a31515; 54 | } 55 | 56 | .ruby .hljs-string, 57 | .hljs-decorator, 58 | .hljs-filter .hljs-argument, 59 | .hljs-localvars, 60 | .hljs-array, 61 | .hljs-attr_selector, 62 | .hljs-pseudo, 63 | .hljs-pi, 64 | .hljs-doctype, 65 | .hljs-deletion, 66 | .hljs-envvar, 67 | .hljs-shebang, 68 | .hljs-preprocessor, 69 | .hljs-pragma, 70 | .userType, 71 | .apache .hljs-sqbracket, 72 | .nginx .hljs-built_in, 73 | .tex .hljs-special, 74 | .hljs-prompt { 75 | color: #2b91af; 76 | } 77 | 78 | .hljs-phpdoc, 79 | .hljs-javadoc, 80 | .hljs-xmlDocTag { 81 | color: #808080; 82 | } 83 | 84 | .vhdl .hljs-typename { font-weight: bold; } 85 | .vhdl .hljs-string { color: #666666; } 86 | .vhdl .hljs-literal { color: #a31515; } 87 | .vhdl .hljs-attribute { color: #00B0E8; } 88 | 89 | .xml .hljs-attribute { color: #f00; } 90 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/api/EmanualAPI.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.api; 2 | 3 | import android.annotation.SuppressLint; 4 | 5 | import com.loopj.android.http.AsyncHttpResponseHandler; 6 | 7 | public class EmanualAPI { 8 | /** 9 | * 下载对应的语言 10 | * 11 | * @param lang 12 | * @param responseHandler 13 | */ 14 | @SuppressLint("DefaultLocale") public static void downloadLang(String lang, AsyncHttpResponseHandler responseHandler) { 15 | RestClient.get(String.format("/md-%s/dist/%s.zip", lang.toLowerCase(), lang.toLowerCase()), null, responseHandler); 16 | } 17 | 18 | /** 19 | * 获得最新版本的信息 20 | * 21 | * @param responseHandler 22 | */ 23 | public static void getVersionInfo(AsyncHttpResponseHandler responseHandler) { 24 | RestClient.get("/md-release/dist/info.json", null, responseHandler); 25 | } 26 | 27 | /** 28 | * 获取对应语言的信息 29 | * @param lang 30 | * @param responseHandler 31 | */ 32 | public static void getLangInfo(String lang, AsyncHttpResponseHandler responseHandler ){ 33 | RestClient.get(String.format("/md-%s/dist/%s/info.json", lang.toLowerCase(), lang.toLowerCase()), null, responseHandler); 34 | } 35 | 36 | /** 37 | * 获取Book feeds 38 | * @param responseHandler 39 | */ 40 | public static void getBookFeeds(AsyncHttpResponseHandler responseHandler){ 41 | RestClient.get(RestClient.URL_FEEDS,"/feeds-book/feeds/all.min.json", null, responseHandler); 42 | } 43 | 44 | /** 45 | * 获取Interview feeds 46 | * @param responseHandler 47 | */ 48 | public static void getInterviewFeeds(AsyncHttpResponseHandler responseHandler){ 49 | RestClient.get(RestClient.URL_FEEDS,"/feeds-interview/feeds/all.min.json", null, responseHandler); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/api/JavaAPI.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.api; 2 | 3 | import com.loopj.android.http.AsyncHttpResponseHandler; 4 | 5 | public class JavaAPI { 6 | public static void getKindInfo(String kind, AsyncHttpResponseHandler responseHandler) { 7 | RestClient.get("/java/" + kind + "/info.json", null, responseHandler); 8 | } 9 | 10 | //include topic list 11 | public static void getTopicInfo(String kind, String topic, AsyncHttpResponseHandler responseHandler) { 12 | RestClient.get("/java/" + kind + "/" + topic + "/info.json", null, responseHandler); 13 | } 14 | 15 | public static void getArticleList(int page, String kind, String topic, AsyncHttpResponseHandler responseHandler) { 16 | RestClient.get("/java/" + kind + "/" + topic + "/" + page + ".json", null, responseHandler); 17 | } 18 | 19 | public static String getArticleUrl(String kind, String topic, String article_name) { 20 | return RestClient.BASE_URL + "/java/" + kind + "/" + topic + "/" + article_name; 21 | } 22 | 23 | public static String getArticleParam(String kind, String topic, String article_name) { 24 | return "path=java/" + kind + "/" + topic + "/" + article_name; 25 | } 26 | 27 | public static void getVersionInfo(AsyncHttpResponseHandler responseHandler) { 28 | RestClient.get("/released/java/update.json", null, responseHandler); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/api/NewFeedsAPI.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.api; 2 | 3 | import com.loopj.android.http.AsyncHttpResponseHandler; 4 | 5 | public class NewFeedsAPI { 6 | 7 | public NewFeedsAPI() { 8 | 9 | } 10 | 11 | public void getInfo(AsyncHttpResponseHandler responseHandler) { 12 | RestClient.get("/java-newfeeds/article/info.json", null, responseHandler); 13 | } 14 | 15 | public void getNewFeeds(int page, AsyncHttpResponseHandler responseHandler) { 16 | RestClient.get("/md-newsfeeds/dist/" + page + ".json", null, responseHandler); 17 | } 18 | 19 | public static String getNewFeedsParam(String filename) { 20 | return "?path=java-newfeeds/article/" + filename; 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/entity/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.entity; 2 | 3 | import com.google.gson.Gson; 4 | 5 | import org.json.JSONArray; 6 | import org.json.JSONException; 7 | 8 | import java.io.Serializable; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * Author: jayin 14 | * Date: 2/1/16 15 | */ 16 | public class BaseEntity implements Serializable { 17 | public static T createByJSON(String json, Class cls) { 18 | Gson gson = new Gson(); 19 | try { 20 | T t = gson.fromJson(json, cls); 21 | return t; 22 | } catch (Exception e) { 23 | return null; 24 | } 25 | } 26 | 27 | 28 | public static List createByJSONArray(String json, Class cls) { 29 | List list = new ArrayList(); 30 | JSONArray jsonArray = null; 31 | try { 32 | jsonArray = new JSONArray(json.toString()); 33 | for (int i = 0; i < jsonArray.length(); i++) { 34 | list.add(createByJSON(jsonArray.getJSONObject(i).toString(), cls) 35 | ); 36 | } 37 | } catch (JSONException e) { 38 | // TODO Auto-generated catch block 39 | e.printStackTrace(); 40 | } 41 | return list; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/entity/BookJSONEntity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 合并后的book.json 7 | * 实体类详见:https://github.com/EManualResource/book-docker-practice/blob/gh-pages/dist/book/book.json 8 | * Author: jayin 9 | * Date: 1/31/16 10 | */ 11 | public class BookJSONEntity extends BaseEntity implements Serializable { 12 | private String title; 13 | private BookInfoEntity info; 14 | 15 | public BookInfoEntity getInfo() { 16 | return info; 17 | } 18 | 19 | public void setInfo(BookInfoEntity info) { 20 | this.info = info; 21 | } 22 | 23 | public String getTitle() { 24 | return title; 25 | } 26 | 27 | public void setTitle(String title) { 28 | this.title = title; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/entity/InterviewJSONEntity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.entity; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/25/16 6 | */ 7 | public class InterviewJSONEntity extends BaseEntity { 8 | 9 | private String title; 10 | private InterviewInfoEntity info; 11 | 12 | public InterviewInfoEntity getInfo() { 13 | return info; 14 | } 15 | 16 | public void setInfo(InterviewInfoEntity info) { 17 | this.info = info; 18 | } 19 | 20 | public String getTitle() { 21 | return title; 22 | } 23 | 24 | public void setTitle(String title) { 25 | this.title = title; 26 | } 27 | 28 | @Override public String toString() { 29 | return "InterviewJSONEntity{" + 30 | "info=" + info + 31 | ", title='" + title + '\'' + 32 | '}'; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/entity/MaintainerEntity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.entity; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/10/16 6 | */ 7 | public class MaintainerEntity extends BaseEntity { 8 | private String name; 9 | private String email; 10 | 11 | public String getEmail() { 12 | return email; 13 | } 14 | 15 | public void setEmail(String email) { 16 | this.email = email; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | @Override public String toString() { 28 | return "MaintainerEntity{" + 29 | "email='" + email + '\'' + 30 | ", name='" + name + '\'' + 31 | '}'; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/entity/NewsFeedsEntity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.entity; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.reflect.TypeToken; 5 | 6 | import java.io.Serializable; 7 | import java.lang.reflect.Type; 8 | import java.util.List; 9 | 10 | public class NewsFeedsEntity implements Serializable { 11 | private String path; 12 | private String name; 13 | private String rname; 14 | private String description; 15 | 16 | public static NewsFeedsEntity create(String json) { 17 | return new Gson().fromJson(json, NewsFeedsEntity.class); 18 | } 19 | 20 | public static List createNewsFeedsObjects(String json) throws Exception{ 21 | Type collectionType = new TypeToken>() { 22 | }.getType(); 23 | List result = null; 24 | 25 | try{ 26 | //json格式不一定对,应为网络原因 27 | result = new Gson().fromJson(json, collectionType); 28 | return result; 29 | }catch (Exception e){ 30 | throw e; 31 | } 32 | } 33 | 34 | public String getPath() { 35 | return path; 36 | } 37 | 38 | public void setPath(String path) { 39 | this.path = path; 40 | } 41 | 42 | public String getName() { 43 | return name; 44 | } 45 | 46 | public void setName(String name) { 47 | this.name = name; 48 | } 49 | 50 | public String getRname() { 51 | return rname; 52 | } 53 | 54 | public void setRname(String rname) { 55 | this.rname = rname; 56 | } 57 | 58 | public String getDescription() { 59 | return description; 60 | } 61 | 62 | public void setDescription(String description) { 63 | this.description = description; 64 | } 65 | 66 | 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/AboutActivity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui; 2 | 3 | import android.content.pm.PackageManager.NameNotFoundException; 4 | import android.os.Bundle; 5 | import android.support.v7.widget.Toolbar; 6 | import android.view.MenuItem; 7 | import android.widget.TextView; 8 | 9 | import butterknife.Bind; 10 | import io.github.emanual.app.R; 11 | import io.github.emanual.app.ui.base.activity.SwipeBackActivity; 12 | import io.github.emanual.app.utils.AndroidUtils; 13 | 14 | /** 15 | * 关于 16 | */ 17 | public class AboutActivity extends SwipeBackActivity { 18 | 19 | @Bind(R.id.tv_version) TextView tv_version; 20 | 21 | @Override protected void initData(Bundle savedInstanceState) { 22 | 23 | } 24 | 25 | @Override protected void initLayout(Bundle savedInstanceState) { 26 | 27 | setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); 28 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 29 | getSupportActionBar().setTitle(R.string.acty_about); 30 | 31 | try { 32 | String text = String.format("%s v%s", 33 | getResources().getString(R.string.application_name), 34 | AndroidUtils.getAppVersionName(getContext())); 35 | tv_version.setText(text); 36 | } catch (NameNotFoundException e) { 37 | e.printStackTrace(); 38 | } 39 | } 40 | 41 | @Override protected int getContentViewId() { 42 | return R.layout.acty_about; 43 | } 44 | 45 | @Override public boolean onOptionsItemSelected(MenuItem item) { 46 | if (item.getItemId() == android.R.id.home) { 47 | finish(); 48 | return true; 49 | } 50 | return super.onOptionsItemSelected(item); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/AppStartActivity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.os.Handler; 7 | 8 | import io.github.emanual.app.R; 9 | 10 | /** 11 | * 启动页 12 | */ 13 | public class AppStartActivity extends Activity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.acty_appstart); 19 | new Handler().postDelayed(new Runnable() { 20 | 21 | @Override 22 | public void run() { 23 | if (!isFinishing()) { 24 | startActivity(new Intent(AppStartActivity.this, MainActivity.class)); 25 | finish(); 26 | } 27 | } 28 | }, 1000); 29 | } 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/adapter/ArticleListAdapter.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.BaseAdapter; 8 | import android.widget.TextView; 9 | 10 | import java.util.List; 11 | 12 | import butterknife.Bind; 13 | import butterknife.ButterKnife; 14 | import io.github.emanual.app.R; 15 | import io.github.emanual.app.utils.ParseUtils; 16 | 17 | public class ArticleListAdapter extends BaseAdapter { 18 | List data; 19 | Context context; 20 | 21 | public ArticleListAdapter(Context context, List data) { 22 | this.data = data; 23 | this.context = context; 24 | } 25 | 26 | @Override 27 | public int getCount() { 28 | return data.size(); 29 | } 30 | 31 | @Override 32 | public Object getItem(int position) { 33 | return data.get(position); 34 | } 35 | 36 | @Override 37 | public long getItemId(int position) { 38 | return position; 39 | } 40 | 41 | @Override 42 | public View getView(int position, View convertView, ViewGroup parent) { 43 | ViewHolder h = null; 44 | if (convertView == null) { 45 | convertView = LayoutInflater.from(context).inflate( 46 | R.layout.adapter_articlelist, null); 47 | h = new ViewHolder(convertView); 48 | convertView.setTag(h); 49 | } else { 50 | h = (ViewHolder) convertView.getTag(); 51 | 52 | } 53 | h.title.setText(ParseUtils.getArticleName(data.get(position))); 54 | return convertView; 55 | } 56 | 57 | static class ViewHolder { 58 | @Bind(R.id.tv_title) 59 | TextView title; 60 | 61 | public ViewHolder(View view) { 62 | ButterKnife.bind(this, view); 63 | } 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/adapter/MainFragmentPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.adapter; 2 | 3 | import java.util.List; 4 | 5 | import android.support.v4.app.Fragment; 6 | import android.support.v4.app.FragmentManager; 7 | import android.support.v4.app.FragmentPagerAdapter; 8 | 9 | public class MainFragmentPagerAdapter extends FragmentPagerAdapter { 10 | FragmentManager fm; 11 | List fragments; 12 | String[] titles; 13 | 14 | public MainFragmentPagerAdapter(FragmentManager fm, List fragments, String[] titles) { 15 | super(fm); 16 | this.fm = fm; 17 | this.fragments = fragments; 18 | this.titles = titles; 19 | } 20 | 21 | @Override 22 | public Fragment getItem(int position) { 23 | 24 | return fragments.get(position); 25 | } 26 | 27 | @Override 28 | public int getCount() { 29 | return fragments.size(); 30 | } 31 | 32 | @Override 33 | public CharSequence getPageTitle(int position) { 34 | return titles[position]; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/adapter/NewFeedsAdapter.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.BaseAdapter; 8 | import android.widget.TextView; 9 | 10 | import java.util.List; 11 | 12 | import butterknife.Bind; 13 | import butterknife.ButterKnife; 14 | import io.github.emanual.app.R; 15 | import io.github.emanual.app.entity.NewsFeedsEntity; 16 | import io.github.emanual.app.utils.EManualUtils; 17 | 18 | public class NewFeedsAdapter extends BaseAdapter { 19 | List data; 20 | Context context; 21 | 22 | public NewFeedsAdapter(Context context, List data) { 23 | this.data = data; 24 | this.context = context; 25 | } 26 | 27 | @Override 28 | public int getCount() { 29 | return data.size(); 30 | } 31 | 32 | @Override 33 | public Object getItem(int position) { 34 | return data.get(position); 35 | } 36 | 37 | @Override 38 | public long getItemId(int position) { 39 | return position; 40 | } 41 | 42 | @Override 43 | public View getView(int position, View convertView, ViewGroup parent) { 44 | ViewHolder h = null; 45 | if (convertView == null) { 46 | convertView = LayoutInflater.from(context).inflate( 47 | R.layout.adapter_newfeeds, null); 48 | h = new ViewHolder(convertView); 49 | convertView.setTag(h); 50 | } else { 51 | h = (ViewHolder) convertView.getTag(); 52 | } 53 | 54 | h.title.setText(EManualUtils.getNewsFeedsTitle(data.get(position).getRname())); 55 | h.time.setText(EManualUtils.getNewsFeedsTime(data.get(position).getRname())); 56 | h.description.setText(data.get(position).getDescription()); 57 | return convertView; 58 | } 59 | 60 | class ViewHolder { 61 | @Bind(R.id.tv_title) TextView title; 62 | @Bind(R.id.tv_time) TextView time; 63 | @Bind(R.id.tv_description) TextView description; 64 | 65 | public ViewHolder(View view) { 66 | ButterKnife.bind(this, view); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/adapter/TopicListAdapter.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.BaseAdapter; 8 | import android.widget.TextView; 9 | 10 | import java.util.List; 11 | 12 | import butterknife.Bind; 13 | import butterknife.ButterKnife; 14 | import io.github.emanual.app.R; 15 | 16 | public class TopicListAdapter extends BaseAdapter { 17 | List data; 18 | Context context; 19 | 20 | public TopicListAdapter(Context context, List data) { 21 | this.data = data; 22 | this.context = context; 23 | } 24 | 25 | @Override 26 | public int getCount() { 27 | return data.size(); 28 | } 29 | 30 | @Override 31 | public Object getItem(int position) { 32 | return data.get(position); 33 | } 34 | 35 | @Override 36 | public long getItemId(int position) { 37 | return position; 38 | } 39 | 40 | @Override 41 | public View getView(int position, View convertView, ViewGroup parent) { 42 | ViewHolder h = null; 43 | if (convertView == null) { 44 | convertView = LayoutInflater.from(context).inflate(R.layout.adapter_topiclist, null); 45 | h = new ViewHolder(convertView); 46 | convertView.setTag(h); 47 | } else { 48 | h = (ViewHolder) convertView.getTag(); 49 | } 50 | h.title.setText(data.get(position)); 51 | return convertView; 52 | } 53 | 54 | class ViewHolder { 55 | @Bind(R.id.tv_title) 56 | TextView title; 57 | 58 | public ViewHolder(View view) { 59 | ButterKnife.bind(this, view); 60 | } 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/base/activity/SwipeBackActivity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.base.activity; 2 | 3 | import android.os.Bundle; 4 | 5 | import butterknife.Bind; 6 | import io.github.emanual.app.R; 7 | import io.github.emanual.app.widget.SwipeBackLayout; 8 | 9 | /** 10 | * Author: jayin 11 | * Date: 1/11/16 12 | */ 13 | public abstract class SwipeBackActivity extends BaseActivity { 14 | @Bind(R.id.swipBackLayout) SwipeBackLayout mSwipeBackLayout; 15 | 16 | @Override protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | 19 | mSwipeBackLayout.setCallBack(new SwipeBackLayout.CallBack() { 20 | @Override 21 | public void onFinish() { 22 | finish(); 23 | } 24 | }); 25 | } 26 | 27 | public SwipeBackLayout getSwipeBackLayout() { 28 | return mSwipeBackLayout; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/base/activity/SwipeRefreshActivity.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.base.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.widget.SwipeRefreshLayout; 5 | 6 | import butterknife.Bind; 7 | import io.github.emanual.app.R; 8 | 9 | /** 10 | * Author: jayin 11 | * Date: 2/5/16 12 | */ 13 | public abstract class SwipeRefreshActivity extends SwipeBackActivity implements SwipeRefreshLayout.OnRefreshListener { 14 | @Bind(R.id.swipeRefreshLayout) SwipeRefreshLayout swipeRefreshLayout; 15 | 16 | public SwipeRefreshLayout getSwipeRefreshLayout() { 17 | return swipeRefreshLayout; 18 | } 19 | 20 | @Override public void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | 23 | swipeRefreshLayout.setOnRefreshListener(this); 24 | swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, 25 | android.R.color.holo_blue_light, 26 | android.R.color.holo_blue_bright, 27 | android.R.color.holo_blue_light); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/base/fragment/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.base.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.design.widget.Snackbar; 6 | import android.support.v4.app.Fragment; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.Toast; 11 | 12 | import butterknife.ButterKnife; 13 | import de.greenrobot.event.EventBus; 14 | import de.greenrobot.event.Subscribe; 15 | import io.github.emanual.app.R; 16 | import io.github.emanual.app.ui.event.EmptyEvent; 17 | 18 | public abstract class BaseFragment extends Fragment { 19 | 20 | /** 21 | * EventBus 3必须要有一个@Subscribe 22 | */ 23 | @Subscribe 24 | public void onEmpty(EmptyEvent event){ 25 | 26 | } 27 | 28 | protected abstract void initData(Bundle savedInstanceState); 29 | protected abstract void initLayout(Bundle savedInstanceState); 30 | protected abstract int getContentViewId(); 31 | 32 | @Override public void onCreate(@Nullable Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | if(!EventBus.getDefault().isRegistered(this)){ 35 | EventBus.getDefault().register(this); 36 | } 37 | } 38 | 39 | @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 40 | View view = inflater.from(getActivity()).inflate(getContentViewId(), container, false); 41 | ButterKnife.bind(this, view); 42 | initData(savedInstanceState); 43 | initLayout(savedInstanceState); 44 | return view; 45 | } 46 | 47 | @Override public void onDestroy() { 48 | super.onDestroy(); 49 | if(EventBus.getDefault().isRegistered(this)){ 50 | EventBus.getDefault().unregister(this); 51 | } 52 | } 53 | 54 | public void toast(String content) { 55 | if (getActivity() != null) { 56 | try{ 57 | Snackbar.make(getActivity().findViewById(R.id.layout_container), content, Snackbar.LENGTH_LONG).show(); 58 | }catch(Exception e){ 59 | Toast.makeText(getActivity(), content, Toast.LENGTH_LONG).show(); 60 | } 61 | 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/base/fragment/SwipeRefreshFragment.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.base.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v4.widget.SwipeRefreshLayout; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | 10 | import butterknife.Bind; 11 | import io.github.emanual.app.R; 12 | 13 | /** 14 | * Author: jayin 15 | * Date: 2/5/16 16 | */ 17 | public abstract class SwipeRefreshFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { 18 | @Bind(R.id.swipeRefreshLayout) SwipeRefreshLayout swipeRefreshLayout; 19 | 20 | public SwipeRefreshLayout getSwipeRefreshLayout() { 21 | return swipeRefreshLayout; 22 | } 23 | 24 | @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 25 | View view = super.onCreateView(inflater, container, savedInstanceState); 26 | swipeRefreshLayout.setOnRefreshListener(this); 27 | swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, 28 | android.R.color.holo_blue_light, 29 | android.R.color.holo_blue_bright, 30 | android.R.color.holo_blue_light); 31 | return view; 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/BaseEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/11/16 6 | */ 7 | public class BaseEvent { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/BookDownloadEndEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import java.io.File; 4 | 5 | import io.github.emanual.app.entity.FeedsItemEntity; 6 | 7 | /** 8 | * 书下载完毕事件 9 | * Author: jayin 10 | * Date: 1/22/16 11 | */ 12 | public class BookDownloadEndEvent extends BaseEvent{ 13 | private File file; 14 | private FeedsItemEntity feedsItemEntity; 15 | 16 | public BookDownloadEndEvent(File file, FeedsItemEntity feedsItemEntity){ 17 | this.file = file; 18 | this.feedsItemEntity = feedsItemEntity; 19 | } 20 | 21 | public File getFile() { 22 | return file; 23 | } 24 | 25 | public void setFile(File file) { 26 | this.file = file; 27 | } 28 | 29 | public FeedsItemEntity getFeedsItemEntity() { 30 | return feedsItemEntity; 31 | } 32 | 33 | public void setFeedsItemEntity(FeedsItemEntity feedsItemEntity) { 34 | this.feedsItemEntity = feedsItemEntity; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/BookDownloadFaildEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import cz.msebera.android.httpclient.Header; 4 | 5 | /** 6 | * Author: jayin 7 | * Date: 2/11/16 8 | */ 9 | public class BookDownloadFaildEvent extends BaseEvent { 10 | 11 | private int statusCode; 12 | private Header[] headers; 13 | private Throwable throwable; 14 | 15 | public BookDownloadFaildEvent(int statusCode, Header[] headers, Throwable throwable) { 16 | this.statusCode = statusCode; 17 | this.headers = headers; 18 | this.throwable = throwable; 19 | } 20 | 21 | public Header[] getHeaders() { 22 | return headers; 23 | } 24 | 25 | public int getStatusCode() { 26 | return statusCode; 27 | } 28 | 29 | public Throwable getThrowable() { 30 | return throwable; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/BookDownloadProgressEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/11/16 6 | */ 7 | public class BookDownloadProgressEvent extends BaseEvent { 8 | 9 | private long bytesWritten; 10 | private long totalSize; 11 | 12 | /** 13 | * @param bytesWritten 已下载 14 | * @param totalSize 总大小 15 | */ 16 | public BookDownloadProgressEvent(long bytesWritten, long totalSize) { 17 | this.bytesWritten = bytesWritten; 18 | this.totalSize = totalSize; 19 | } 20 | 21 | public long getBytesWritten() { 22 | return bytesWritten; 23 | } 24 | 25 | public void setBytesWritten(long bytesWritten) { 26 | this.bytesWritten = bytesWritten; 27 | } 28 | 29 | public long getTotalSize() { 30 | return totalSize; 31 | } 32 | 33 | public void setTotalSize(long totalSize) { 34 | this.totalSize = totalSize; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/BookDownloadStartEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/11/16 6 | */ 7 | public class BookDownloadStartEvent extends BaseEvent { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/EmptyEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * 空事件 5 | * Author: jayin 6 | * Date: 1/22/16 7 | */ 8 | public class EmptyEvent extends BaseEvent { 9 | String message; 10 | 11 | public EmptyEvent(String message) { 12 | this.message = message; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/FinishLoadQuestionListEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import java.util.List; 4 | 5 | import io.github.emanual.app.entity.QuestionEntity; 6 | 7 | /** 8 | * Author: jayin 9 | * Date: 2/27/16 10 | */ 11 | public class FinishLoadQuestionListEvent extends BaseEvent { 12 | 13 | private List questionEntityList; 14 | 15 | public FinishLoadQuestionListEvent(List data) { 16 | this.questionEntityList = data; 17 | } 18 | 19 | public List getQuestionEntityList() { 20 | return questionEntityList; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/FinishQueryBookListEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import java.util.List; 4 | 5 | import io.github.emanual.app.entity.BookJSONEntity; 6 | 7 | /** 8 | * 完成查询本地的BookList事件 9 | * Author: jayin 10 | * Date: 1/25/16 11 | */ 12 | public class FinishQueryBookListEvent extends BaseEvent { 13 | 14 | List data; 15 | 16 | public FinishQueryBookListEvent(List data) { 17 | this.data = data; 18 | } 19 | 20 | public List getData() { 21 | return data; 22 | } 23 | 24 | public void setData(List data) { 25 | this.data = data; 26 | } 27 | 28 | @Override public String toString() { 29 | return "FinishQueryBookListEvent{" + 30 | "data=" + data + 31 | '}'; 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/FinishQueryInterviewListEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import java.util.List; 4 | 5 | import io.github.emanual.app.entity.InterviewJSONEntity; 6 | 7 | /** 8 | * Author: jayin 9 | * Date: 2/25/16 10 | */ 11 | public class FinishQueryInterviewListEvent extends BaseEvent { 12 | List data; 13 | 14 | public FinishQueryInterviewListEvent(List data) { 15 | this.data = data; 16 | } 17 | 18 | public List getData() { 19 | return data; 20 | } 21 | 22 | public void setData(List data) { 23 | this.data = data; 24 | } 25 | 26 | @Override public String toString() { 27 | return "FinishQueryInterviewListEvent{" + 28 | "data=" + data + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/GetQuestionListEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import io.github.emanual.app.entity.BaseEntity; 4 | 5 | /** 6 | * 获取问题列表 7 | * Author: jayin 8 | * Date: 2/27/16 9 | */ 10 | public class GetQuestionListEvent extends BaseEntity { 11 | 12 | private String interviewName; 13 | 14 | public GetQuestionListEvent(String interviewName) { 15 | this.interviewName = interviewName; 16 | } 17 | 18 | public String getInterviewName() { 19 | return interviewName; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/InterviewDownloadEndEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import java.io.File; 4 | 5 | import io.github.emanual.app.entity.FeedsItemEntity; 6 | 7 | /** 8 | * Author: jayin 9 | * Date: 2/23/16 10 | */ 11 | public class InterviewDownloadEndEvent extends BaseEvent { 12 | private File file; 13 | private FeedsItemEntity feedsItemEntity; 14 | 15 | public InterviewDownloadEndEvent(File file, FeedsItemEntity feedsItemEntity){ 16 | this.file = file; 17 | this.feedsItemEntity = feedsItemEntity; 18 | } 19 | 20 | public File getFile() { 21 | return file; 22 | } 23 | 24 | public void setFile(File file) { 25 | this.file = file; 26 | } 27 | 28 | public FeedsItemEntity getFeedsItemEntity() { 29 | return feedsItemEntity; 30 | } 31 | 32 | public void setFeedsItemEntity(FeedsItemEntity feedsItemEntity) { 33 | this.feedsItemEntity = feedsItemEntity; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/InterviewDownloadFaildEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import cz.msebera.android.httpclient.Header; 4 | 5 | /** 6 | * Author: jayin 7 | * Date: 2/23/16 8 | */ 9 | public class InterviewDownloadFaildEvent extends BaseEvent { 10 | private int statusCode; 11 | private Header[] headers; 12 | private Throwable throwable; 13 | 14 | public InterviewDownloadFaildEvent(int statusCode, Header[] headers, Throwable throwable) { 15 | this.statusCode = statusCode; 16 | this.headers = headers; 17 | this.throwable = throwable; 18 | } 19 | 20 | public Header[] getHeaders() { 21 | return headers; 22 | } 23 | 24 | public int getStatusCode() { 25 | return statusCode; 26 | } 27 | 28 | public Throwable getThrowable() { 29 | return throwable; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/InterviewDownloadProgressEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/23/16 6 | */ 7 | public class InterviewDownloadProgressEvent extends BaseEvent { 8 | private long bytesWritten; 9 | private long totalSize; 10 | 11 | /** 12 | * @param bytesWritten 已下载 13 | * @param totalSize 总大小 14 | */ 15 | public InterviewDownloadProgressEvent(long bytesWritten, long totalSize) { 16 | this.bytesWritten = bytesWritten; 17 | this.totalSize = totalSize; 18 | } 19 | 20 | public long getBytesWritten() { 21 | return bytesWritten; 22 | } 23 | 24 | public void setBytesWritten(long bytesWritten) { 25 | this.bytesWritten = bytesWritten; 26 | } 27 | 28 | public long getTotalSize() { 29 | return totalSize; 30 | } 31 | 32 | public void setTotalSize(long totalSize) { 33 | this.totalSize = totalSize; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/InterviewDownloadStartEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/23/16 6 | */ 7 | public class InterviewDownloadStartEvent extends BaseEvent { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/QueryBookListEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * 去查询BookList事件 5 | * Author: jayin 6 | * Date: 1/25/16 7 | */ 8 | public class QueryBookListEvent extends BaseEvent { 9 | 10 | public QueryBookListEvent(){ 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/QueryInterviewListEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * Author: jayin 5 | * Date: 2/25/16 6 | */ 7 | public class QueryInterviewListEvent extends BaseEvent{ 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/QuestionUpdateEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | import io.github.emanual.app.entity.QuestionEntity; 4 | 5 | /** 6 | * Author: jayin 7 | * Date: 3/9/16 8 | */ 9 | public class QuestionUpdateEvent extends BaseEvent{ 10 | private QuestionEntity questionEntity; 11 | 12 | public QuestionUpdateEvent(QuestionEntity questionEntity){ 13 | this.questionEntity = questionEntity; 14 | } 15 | 16 | public QuestionEntity getQuestionEntity() { 17 | return questionEntity; 18 | } 19 | 20 | public void setQuestionEntity(QuestionEntity questionEntity) { 21 | this.questionEntity = questionEntity; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/event/UnPackFinishEvent.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.event; 2 | 3 | /** 4 | * 教程下载后解压完成事件 5 | * Author: jayin 6 | * Date: 1/22/16 7 | */ 8 | public class UnPackFinishEvent extends BaseEvent { 9 | private Exception exception; 10 | 11 | public UnPackFinishEvent() { 12 | this(null); 13 | } 14 | 15 | public UnPackFinishEvent(Exception exception) { 16 | this.exception = exception; 17 | } 18 | 19 | public Exception getException() { 20 | return exception; 21 | } 22 | 23 | public void setException(Exception exception) { 24 | this.exception = exception; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/ui/fragment/InterviewDetailFragment.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.ui.fragment; 2 | 3 | import android.os.Bundle; 4 | 5 | import io.github.emanual.app.R; 6 | import io.github.emanual.app.entity.InterviewJSONEntity; 7 | import io.github.emanual.app.ui.base.fragment.BaseFragment; 8 | 9 | /** 10 | * A placeholder fragment containing a simple view. 11 | */ 12 | public class InterviewDetailFragment extends BaseFragment { 13 | 14 | public static final String EXTRA_INTERVIEW = "EXTRA_INTERVIEW"; 15 | public static final String EXTRA_INDEX_PAGE = "INDEX_PAGE"; 16 | 17 | InterviewJSONEntity interviewJSONEntity; 18 | int indexPage = 0; 19 | 20 | public InterviewDetailFragment newInstance(InterviewJSONEntity interviewJSONEntity, int index) { 21 | InterviewDetailFragment fragment = new InterviewDetailFragment(); 22 | Bundle args = new Bundle(); 23 | args.putSerializable(InterviewDetailFragment.EXTRA_INTERVIEW, interviewJSONEntity); 24 | args.putInt(InterviewDetailFragment.EXTRA_INDEX_PAGE, index); 25 | fragment.setArguments(args); 26 | return fragment; 27 | } 28 | 29 | 30 | @Override protected void initData(Bundle savedInstanceState) { 31 | interviewJSONEntity = (InterviewJSONEntity) getArguments().getSerializable(EXTRA_INTERVIEW); 32 | indexPage = getArguments().getInt(EXTRA_INDEX_PAGE); 33 | 34 | } 35 | 36 | @Override protected void initLayout(Bundle savedInstanceState) { 37 | 38 | } 39 | 40 | @Override protected int getContentViewId() { 41 | return R.layout.fragment_interview_detail; 42 | } 43 | 44 | //load question 45 | //render 46 | //do action - feed back :1. show the answer at once 47 | //do action - next : note: NO NEXT 48 | //do action - pre : not : NO Preview 49 | 50 | 51 | 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/BookResource.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | import android.content.Context; 4 | 5 | import java.io.File; 6 | import java.util.ArrayList; 7 | import java.util.Arrays; 8 | import java.util.List; 9 | 10 | import io.github.emanual.app.entity.BookJSONEntity; 11 | 12 | /** 13 | * Author: jayin 14 | * Date: 1/23/16 15 | */ 16 | public class BookResource { 17 | /** 18 | * 获取所有books/* 所有文件名(英文书名)列表 19 | * @param context 20 | * @return 21 | */ 22 | public static List getBookNameList(Context context) { 23 | List books = new ArrayList<>(); 24 | File bookDir = new File(AppPath.getBooksPath(context)); 25 | if (!bookDir.exists()) { 26 | bookDir.mkdirs(); 27 | } 28 | books.addAll(Arrays.asList(bookDir.list())); 29 | return books; 30 | } 31 | 32 | /** 33 | * 获取所有books//book/book.json 34 | * @param context 35 | * @return 36 | */ 37 | public static List getBookJSONList(Context context) { 38 | List books = new ArrayList<>(); 39 | File bookDir = new File(AppPath.getBooksPath(context)); 40 | if (!bookDir.exists()) { 41 | bookDir.mkdirs(); 42 | } 43 | for (String bookName : bookDir.list()) { 44 | String json = _.readFile(AppPath.getBookJSONFilePath(context, bookName)); 45 | BookJSONEntity bookJSONEntity = BookJSONEntity.createByJSON(json, BookJSONEntity.class); 46 | books.add(bookJSONEntity); 47 | 48 | } 49 | return books; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/MyDBManager.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | import android.content.Context; 4 | 5 | 6 | public class MyDBManager { 7 | 8 | // public static DbUtils getDBUtils(Context context){ 9 | // return DbUtils.create(context, "manual_java.db").configDebug(true); 10 | // } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/ParseUtils.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | import java.net.URLEncoder; 5 | 6 | import android.util.Log; 7 | 8 | import io.github.emanual.app.api.RestClient; 9 | 10 | public class ParseUtils { 11 | 12 | public static int getArticleId(String filename) { 13 | return Integer.parseInt(filename.split("-")[0]); 14 | } 15 | 16 | // [(2013-1-1,0010)]title].md 17 | public static String getArticleName(String filename) { 18 | String[] s = filename.replaceAll("\\.[Mm]{1}[Dd]{1}", "").split("-"); 19 | //这是日期开头 20 | if (_.isNumber(s[0]) && _.isNumber(s[1]) && _.isNumber(s[2])) { 21 | return s[3]; 22 | } else { //这是文章编号 23 | return s[1]; 24 | } 25 | } 26 | 27 | // http:xxxxx/assets/preview.html?path=/a/b/[(2013-1-1,0010)]title].md 28 | // public static String getArticleNameByUrl(String url) { 29 | // String[] s = url.split("=")[1].split("/"); 30 | // return getArticleName(s[s.length - 1]); 31 | // } 32 | 33 | // http:xxxxx/a/b/[(2013-1-1,0010)]title].md 34 | public static String getArticleNameByUrl(String url) { 35 | String[] s = url.split("/"); 36 | return getArticleName(s[s.length - 1]); 37 | } 38 | 39 | public static String encodeArticleURL(String url) { 40 | try { 41 | StringBuilder sb = new StringBuilder(RestClient.URL_Preview 42 | + "?path="); 43 | for (String s : url.split("=")[1].split("/")) { 44 | sb.append(URLEncoder.encode(s, "UTF-8")).append("/"); 45 | } 46 | sb.deleteCharAt(sb.length() - 1); 47 | return sb.toString(); 48 | } catch (UnsupportedEncodingException e) { 49 | e.printStackTrace(); 50 | } 51 | return url; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/StorageUtils.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | import android.os.Environment; 4 | 5 | public class StorageUtils { 6 | /* Checks if external storage is available for read and write */ 7 | public static boolean isExternalStorageWritable() { 8 | String state = Environment.getExternalStorageState(); 9 | if (Environment.MEDIA_MOUNTED.equals(state)) { 10 | return true; 11 | } 12 | return false; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/SwipeRefreshLayoutUtils.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | import android.support.v4.widget.SwipeRefreshLayout; 4 | 5 | public class SwipeRefreshLayoutUtils { 6 | 7 | public static void setRefreshing( 8 | final SwipeRefreshLayout swipeRefreshLayout, 9 | final boolean isRefreshing) { 10 | if (swipeRefreshLayout == null) 11 | return; 12 | swipeRefreshLayout.post(new Runnable() { 13 | 14 | @Override public void run() { 15 | swipeRefreshLayout.setRefreshing(isRefreshing); 16 | } 17 | }); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/UmengAnalytics.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | /** 4 | * 友盟统计 5 | * 6 | * @author jayin 7 | */ 8 | public class UmengAnalytics { 9 | 10 | public static final String ID_EVENT_VIEW_NEWSFEEDS = "view_newsfeeds"; // 查看新鲜事 11 | public static final String ID_EVENT_VIEW_FILE = "view_file";// 查看文档 12 | public static final String ID_EVENT_VIEW_MODULE = "view_module";// 查看语言模块 13 | 14 | public static final int DEAFULT_DURATION = 0;// 默认时常 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/utils/ZipUtils.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.utils; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | 6 | import net.lingala.zip4j.core.ZipFile; 7 | import net.lingala.zip4j.exception.ZipException; 8 | 9 | /** 10 | * Usage: 11 | * 12 | * String path = "/Users/jayin/repos/FileManage/java.zip"; 13 | * try { 14 | * ZipUtils.unZipFiles(path, "/Users/jayin/repos/FileManage/java"); 15 | * } catch (IOException e) { 16 | * e.printStackTrace(); 17 | * } 18 | * 19 | */ 20 | public class ZipUtils { 21 | 22 | /** 23 | * 解压到指定目录 24 | * 25 | * @param zipPath 26 | * @param descDir 27 | */ 28 | public static void unZipFiles(String zipPath, String descDir) throws IOException { 29 | unZipFiles(new File(zipPath), descDir); 30 | } 31 | 32 | /** 33 | * 解压文件到指定目录 34 | * 35 | * @param source 36 | * @param descDir 37 | */ 38 | @SuppressWarnings("rawtypes") 39 | public static void unZipFiles(File source, String descDir) throws IOException { 40 | ZipFile zipFile; 41 | try { 42 | zipFile = new ZipFile(source); 43 | zipFile.extractAll(descDir); 44 | } catch (ZipException e) { 45 | e.printStackTrace(); 46 | } 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/widget/DefaultWebView.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.webkit.WebView; 6 | 7 | /** 8 | * Author: jayin 9 | * Date: 3/8/16 10 | */ 11 | public class DefaultWebView extends WebView{ 12 | 13 | 14 | public DefaultWebView(Context context, AttributeSet attrs, int defStyleAttr) { 15 | super(context, attrs, defStyleAttr); 16 | init(); 17 | } 18 | 19 | public DefaultWebView(Context context, AttributeSet attrs) { 20 | super(context, attrs); 21 | init(); 22 | } 23 | 24 | public DefaultWebView(Context context) { 25 | super(context); 26 | init(); 27 | } 28 | 29 | private void init() { 30 | this.getSettings().setJavaScriptEnabled(true); 31 | this.getSettings().setDomStorageEnabled(true); 32 | this.getSettings().setAppCacheEnabled(true); 33 | this.getSettings().setDatabaseEnabled(true); 34 | this.getSettings().setGeolocationEnabled(true); 35 | this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/widget/DownloadConfirmDialog.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.widget; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.Context; 5 | import android.content.DialogInterface; 6 | 7 | /** 8 | * 下载/更新确认框 9 | * 10 | * @author jayin 11 | */ 12 | public class DownloadConfirmDialog extends AlertDialog { 13 | private String lang; 14 | private String msg_format = "准备下载/更新 %s 数据包,这会消耗你的数据流量"; 15 | 16 | public DownloadConfirmDialog(Context context) { 17 | super(context); 18 | this.setTitle("提醒"); 19 | this.setCanceledOnTouchOutside(false); 20 | 21 | this.setCancleListener(new OnClickListener() { 22 | 23 | @Override public void onClick(DialogInterface dialog, int which) { 24 | dismiss(); 25 | } 26 | }); 27 | } 28 | 29 | public void setConfirmClickListener(DialogInterface.OnClickListener confirmListener) { 30 | this.setButton(BUTTON_POSITIVE, "下载", confirmListener); 31 | } 32 | 33 | public void setCancleListener(DialogInterface.OnClickListener cancleListener) { 34 | this.setButton(BUTTON_NEGATIVE, "取消", cancleListener); 35 | } 36 | 37 | public void show(String lang) { 38 | this.lang = lang; 39 | this.setMessage(String.format(msg_format, lang)); 40 | super.show(); 41 | 42 | 43 | } 44 | 45 | public String getLang() { 46 | return lang; 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/emanual/app/widget/NewVersionDialog.java: -------------------------------------------------------------------------------- 1 | package io.github.emanual.app.widget; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.Context; 5 | import android.content.DialogInterface; 6 | import android.content.Intent; 7 | import android.net.Uri; 8 | 9 | public class NewVersionDialog extends AlertDialog { 10 | 11 | Context context; 12 | String updaInfo, url; 13 | 14 | public NewVersionDialog(Context context) { 15 | super(context); 16 | this.context = context; 17 | init(); 18 | } 19 | 20 | private void init() { 21 | this.setTitle("发现新版本"); 22 | this.setButton(BUTTON_NEGATIVE, "下次更新", new OnClickListener() { 23 | 24 | @Override public void onClick(DialogInterface dialog, int which) { 25 | dismiss(); 26 | } 27 | }); 28 | this.setButton(BUTTON_POSITIVE, "立即更新", new OnClickListener() { 29 | 30 | @Override public void onClick(DialogInterface dialog, int which) { 31 | Uri uri = Uri.parse(url); 32 | Intent intent = new Intent(Intent.ACTION_VIEW, uri); 33 | context.startActivity(intent); 34 | NewVersionDialog.this.dismiss(); 35 | } 36 | }); 37 | } 38 | 39 | public void show(String updateInfo, String url) { 40 | this.updaInfo = updateInfo; 41 | this.url = url; 42 | this.setMessage(updateInfo); 43 | 44 | super.show(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alpha.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/layout_listview_top_to_bottom_alpha.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/right_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/right_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/stay.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/zoom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/anim/zoom_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_about_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_about_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_accept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_cleanup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_cleanup.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_rating_important.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_rating_important.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_rating_important_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_rating_important_dark.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_rating_not_important.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_rating_not_important.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_rating_not_important_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_rating_not_important_dark.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_settings_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_settings_dark.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_social_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_social_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_social_share_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_action_social_share_dark.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_bg_dialog_white.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_bg_dialog_white.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_blue_transparent_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_btn_blue_transparent_normal.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_blue_transparent_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_btn_blue_transparent_pressed.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_green_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_btn_green_normal.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_green_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_btn_green_pressed.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_red_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_btn_red_normal.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_red_pressed.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_btn_red_pressed.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_check_circle_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_check_circle_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_cloud_download_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_cloud_download_black_36dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_icon_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_icon_code.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_icon_code_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_icon_code_small.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_icon_code_small_pure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_icon_code_small_pure.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_icon_document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_icon_document.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_icon_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_icon_file.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_black_36dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_line_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_line_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_line_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_line_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_line_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_line_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_angular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_angular.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_c.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_http2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_http2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_java.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_java.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_javascript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_javascript.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_php.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_python.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_module_scala.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_module_scala.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_navigation_previous_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_navigation_previous_item.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notify_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_notify_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_progressbar_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_progressbar_blue.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_widget_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-hdpi/ic_widget_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_app_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/drawable-xhdpi/ic_app_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_common_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_common_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_item_whit2grey.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_appstart.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | 16 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | > 9 | 10 | 14 | 15 | 17 | 18 | 19 | 20 | 25 | 26 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_favouritelist.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_feeds_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 19 | 25 | 26 | 27 | 28 | 32 | 33 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_filetree.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_interview_feeds.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 19 | 25 | 26 | 27 | 28 | 32 | 33 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 19 | 20 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_question_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/acty_topiclist.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 15 | 16 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_articlelist.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_booklist.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 21 | 22 | 28 | 29 | 36 | 37 | 45 | 46 | 47 | 51 | 52 | 53 | 59 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_favouritelist.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 21 | 22 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_filetree.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 20 | 21 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_interviewlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 21 | 22 | 28 | 29 | 36 | 37 | 45 | 46 | 47 | 51 | 52 | 53 | 59 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_newfeeds.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 22 | 23 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_questionlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 21 | 22 | 23 | 30 | 31 | 41 | 42 | 43 | 47 | 48 | 49 | 55 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_topiclist.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_book_list.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_interview_detail.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_interview_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_newfeeds.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/menu/browser.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/favouritelist.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/favouritelist_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_question_detail.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/shadow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/mipmap-xhdpi/shadow_left.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-land-v19/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw720dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 120dp 5 | 120dp 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-v11/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-v19/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v19/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 28dp 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-v19/theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | > 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #FF0033 5 | #000000 6 | #0000CC 7 | #426DED 8 | #ffffff 9 | #FFE1E8EB 10 | #ffccddff 11 | #00ffffff 12 | 13 | #ffeff3f6 14 | #FF339900 15 | #FF6700 16 | #fffea4fd 17 | #fffcffa3 18 | #E34C0B 19 | #BFBFBF 20 | #808080 21 | #404040 22 | #36362B 23 | #FF666666 24 | #6699FF 25 | #3366CC 26 | #003399 27 | #FF3F9FE0 28 | #2CA7EA 29 | #2A94E0 30 | #99CC33 31 | #00CC00 32 | #FF339900 33 | #FF96AA39 34 | #FFCC00 35 | #FF9900 36 | #FF6600 37 | #CC0000 38 | #02bbf3 39 | 40 | #802CA7EA 41 | 42 | #0099CC 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16dp 5 | 16dp 6 | 60dp 7 | 90dp 8 | 10dp 9 | 10 | 11 | 100.0dp 12 | 100dp 13 | 14 | 15 | 0dp 16 | 16dp 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 编程助手 5 | 更多 6 | Hello world! 7 | 分 享 8 | 错误反馈 9 | 收 藏 10 | 关 于 11 | 清空 12 | 删除所选 13 | 14 | 15 | 新鲜事 16 | 学习库 17 | 应试宝典 18 | 发 现 19 | 20 | 21 | 22 | 关于 23 | 用户反馈 24 | 浏览 25 | 资源下载 26 | Settings 27 | 面试笔试资源下载 28 | 应试宝典 29 | 问题列表 30 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | google() 7 | } 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.0.1' 10 | 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | jcenter() 17 | 18 | //这里是 LeanCloud 的包仓库 19 | maven { 20 | url "http://mvn.leancloud.cn/nexus/content/repositories/releases" 21 | } 22 | google() 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /extras/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/.gitkeep -------------------------------------------------------------------------------- /extras/extras.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /extras/umeng-update/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /extras/umeng-update/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 21 5 | buildToolsVersion '26.0.2' 6 | 7 | defaultConfig { 8 | minSdkVersion 14 9 | targetSdkVersion 21 10 | versionCode 1 11 | versionName "1.0" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | compile fileTree(dir: 'libs', include: ['*.jar']) 23 | compile 'com.android.support:appcompat-v7:21.0.3' 24 | } 25 | -------------------------------------------------------------------------------- /extras/umeng-update/libs/umeng-update-v2.6.0.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/libs/umeng-update-v2.6.0.1.jar -------------------------------------------------------------------------------- /extras/umeng-update/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/jayin/jayin/App/adt-bundle-mac-x86_64-20140702/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /extras/umeng-update/src/androidTest/java/com/iemanual/umeng_update/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.iemanual.umeng_update; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /extras/umeng-update/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/jniLibs/libbspatch.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/jniLibs/libbspatch.so -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_off_focused_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_off_focused_holo_light.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_off_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_off_holo_light.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_off_pressed_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_off_pressed_holo_light.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_on_focused_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_on_focused_holo_light.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_on_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_on_holo_light.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_on_pressed_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_btn_check_on_pressed_holo_light.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_close_bg_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_close_bg_normal.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_close_bg_tap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable-hdpi/umeng_update_close_bg_tap.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/tb_munion_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/tb_munion_item_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_common_gradient_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_common_gradient_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_common_gradient_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_cancel_bg_focused.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_cancel_bg_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_cancel_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_cancel_bg_tap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_check_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | 13 | 16 | 17 | 20 | 23 | 24 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_close_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_ok_bg_focused.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_ok_bg_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_ok_bg_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_button_ok_bg_tap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_title_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/drawable/umeng_update_wifi_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/extras/umeng-update/src/main/res/drawable/umeng_update_wifi_disable.png -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/layout/tb_munion_aditem.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/layout/tb_munion_adview.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 12 | 13 | 20 | 21 | 24 | 25 | 32 | 33 | 39 | 40 | 47 | 48 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/values-zh/umeng_common_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 正在下载中. 4 | 下载出错啦,请检查网络后继续。 5 | 暂停 6 | 继续 7 | 取消 8 | 正在下载: 9 | 暂停: 10 | 正在下载应用 11 | 正在更新安装包 12 | 请连接网络后再尝试! 13 | 下载失败 14 | 下载完成,请点击安装 15 | 更新完成,请点击安装 16 | 新版本已经准备好,请点击安装 17 | 18 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/values-zh/umeng_update_string.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 未联网 4 | 发现新版本 5 | 最新版本: 6 | 更新内容 7 | 仅需要下载: 8 | 新版本大小: 9 | (提示:非WIFI环境) 10 | 立即更新 11 | 应用更新 12 | 以后再说 13 | 忽略该版 14 | 正在更新中.... 15 | 最新版本已下载,是否安装? 16 | 17 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Umeng-update 3 | 4 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/values/tb_munion_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #e3e3e3 5 | 正在下载: 6 | 7 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/values/umeng_common_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | The app is already in downloading list. 4 | dowload interrupted. 5 | Pause 6 | Continue 7 | Cancel 8 | Downloading: 9 | Pause: 10 | Download start. 11 | Patch start. 12 | Please make sure you are connected to internet, download failed 13 | Download Failed! 14 | Download finished,click to install it. 15 | Patch finished,click to install it. 16 | New version is ready,click to install it. 17 | icon 18 | -------------------------------------------------------------------------------- /extras/umeng-update/src/main/res/values/umeng_update_string.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Please make sure you are connected to internet,update failed 5 | New version found 6 | Latest version: 7 | Update Content 8 | Update size: 9 | Target size: 10 | (Warning: Not WIFI Condition) 11 | Update now 12 | App updating 13 | Not now 14 | Ingore this 15 | Updating.... 16 | The lastest version has been downloaded, install now ? 17 | 2.6.0.1.20150312 18 | 19 | -------------------------------------------------------------------------------- /gradle-app.setting: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /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 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EManual/EManual-Android/29420ceb3da359ba63f2648309ca930568b17341/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 28 10:00:20 PST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':extras:umeng-update' --------------------------------------------------------------------------------