├── app ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── drawable-hdpi │ │ │ ├── edit_icon.png │ │ │ ├── erase_icon.png │ │ │ ├── items_icon.png │ │ │ ├── add_article.png │ │ │ ├── back_button.png │ │ │ ├── blank_person.png │ │ │ ├── editor_mode.png │ │ │ ├── groups_icon.png │ │ │ ├── people_icon.png │ │ │ ├── places_icon.png │ │ │ ├── reader_mode.png │ │ │ ├── concepts_icon.png │ │ │ ├── delete_article.png │ │ │ ├── overflow_button.png │ │ │ ├── rename_article.png │ │ │ ├── search_articles.png │ │ │ ├── connection_arrows.png │ │ │ ├── membership_arrow.png │ │ │ ├── unset_image_group.png │ │ │ ├── unset_image_item.png │ │ │ ├── unset_image_place.png │ │ │ └── unset_image_concept.png │ │ ├── drawable-mdpi │ │ │ ├── edit_icon.png │ │ │ ├── erase_icon.png │ │ │ ├── items_icon.png │ │ │ ├── add_article.png │ │ │ ├── back_button.png │ │ │ ├── blank_person.png │ │ │ ├── editor_mode.png │ │ │ ├── groups_icon.png │ │ │ ├── people_icon.png │ │ │ ├── places_icon.png │ │ │ ├── reader_mode.png │ │ │ ├── concepts_icon.png │ │ │ ├── delete_article.png │ │ │ ├── overflow_button.png │ │ │ ├── rename_article.png │ │ │ ├── search_articles.png │ │ │ ├── connection_arrows.png │ │ │ ├── membership_arrow.png │ │ │ ├── unset_image_group.png │ │ │ ├── unset_image_item.png │ │ │ ├── unset_image_place.png │ │ │ └── unset_image_concept.png │ │ ├── drawable-xhdpi │ │ │ ├── edit_icon.png │ │ │ ├── add_article.png │ │ │ ├── back_button.png │ │ │ ├── editor_mode.png │ │ │ ├── erase_icon.png │ │ │ ├── groups_icon.png │ │ │ ├── items_icon.png │ │ │ ├── people_icon.png │ │ │ ├── places_icon.png │ │ │ ├── reader_mode.png │ │ │ ├── blank_person.png │ │ │ ├── concepts_icon.png │ │ │ ├── delete_article.png │ │ │ ├── rename_article.png │ │ │ ├── membership_arrow.png │ │ │ ├── overflow_button.png │ │ │ ├── search_articles.png │ │ │ ├── unset_image_item.png │ │ │ ├── connection_arrows.png │ │ │ ├── unset_image_concept.png │ │ │ ├── unset_image_group.png │ │ │ └── unset_image_place.png │ │ ├── mipmap-hdpi │ │ │ └── worldscribe_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── worldscribe_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── worldscribe_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── worldscribe_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── worldscribe_launcher.png │ │ ├── values │ │ │ ├── integers.xml │ │ │ ├── values.xml │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ └── dimens.xml │ │ ├── xml │ │ │ ├── provider_paths.xml │ │ │ └── searchable.xml │ │ ├── anim │ │ │ ├── slide_in_from_bottom.xml │ │ │ ├── slide_out_bottom.xml │ │ │ ├── no_anim.xml │ │ │ └── slide_in_left.xml │ │ ├── drawable │ │ │ ├── textbox_gradient.xml │ │ │ ├── border_blue.xml │ │ │ ├── border_gray.xml │ │ │ ├── border_purple.xml │ │ │ ├── border_red.xml │ │ │ ├── textbox_gradient_night_mode.xml │ │ │ ├── border_green.xml │ │ │ ├── border_orange.xml │ │ │ ├── button_selector_blue.xml │ │ │ ├── button_selector_gray.xml │ │ │ ├── button_selector_purple.xml │ │ │ ├── button_selector_red.xml │ │ │ ├── button_selector_orange.xml │ │ │ ├── button_selector_green.xml │ │ │ ├── article_link_selector_blue.xml │ │ │ ├── article_link_selector_gray.xml │ │ │ ├── article_link_selector_purple.xml │ │ │ ├── article_link_selector_red.xml │ │ │ ├── article_link_selector_green.xml │ │ │ └── article_link_selector_orange.xml │ │ ├── menu │ │ │ ├── save_edit_menu.xml │ │ │ ├── select_article_menu.xml │ │ │ ├── snippet_menu.xml │ │ │ ├── article_menu.xml │ │ │ └── list_menu.xml │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ ├── layout │ │ │ ├── spinner_item.xml │ │ │ ├── spinner_item_night_mode.xml │ │ │ ├── theme_list_item.xml │ │ │ ├── list_item_text.xml │ │ │ ├── layout_dropbox_error.xml │ │ │ ├── rename_snippet_dialog.xml │ │ │ ├── announcements_dialog.xml │ │ │ ├── changelog_dialog.xml │ │ │ ├── rename_world_dialog.xml │ │ │ ├── rename_article_dialog.xml │ │ │ ├── activity_create_or_load_world.xml │ │ │ ├── changelog_header_layout.xml │ │ │ ├── activity_load_world.xml │ │ │ ├── changelog_row_layout.xml │ │ │ ├── erasable_item_card.xml │ │ │ ├── activity_article_list.xml │ │ │ ├── activity_select_article.xml │ │ │ ├── snippet_card.xml │ │ │ ├── activity_permission.xml │ │ │ ├── activity_create_snippet.xml │ │ │ ├── activity_create_world.xml │ │ │ ├── membership_card.xml │ │ │ ├── connection_card.xml │ │ │ └── activity_snippet.xml │ │ ├── directory_layout.txt~ │ │ └── raw │ │ │ └── announcements.xml │ │ └── java │ │ ├── com │ │ └── averi │ │ │ └── worldscribe │ │ │ ├── GenericFileProvider.java │ │ │ ├── Gender.java │ │ │ ├── adapters │ │ │ ├── StringListContext.java │ │ │ ├── ArticleLinkAdapter.java │ │ │ ├── AppThemeArrayAdapter.java │ │ │ └── StringListAdapter.java │ │ │ ├── utilities │ │ │ ├── ErrorLoggingActivity.java │ │ │ ├── IntentFields.java │ │ │ ├── tasks │ │ │ │ ├── LoadResourceImageTask.java │ │ │ │ ├── CreateWorldTask.java │ │ │ │ ├── RenameWorldTask.java │ │ │ │ ├── DeleteWorldTask.java │ │ │ │ ├── CreateArticleTask.java │ │ │ │ ├── WriteTextToFileTask.java │ │ │ │ ├── SaveResidenceTask.java │ │ │ │ ├── SaveMembershipTask.java │ │ │ │ ├── SaveConnectionTask.java │ │ │ │ ├── LoadExternalImageTask.java │ │ │ │ └── GetMembershipsTask.java │ │ │ ├── ThemedSnackbar.java │ │ │ ├── TaskRunner.java │ │ │ ├── AttributeGetter.java │ │ │ ├── ImageDecoder.java │ │ │ ├── WorldUtilities.java │ │ │ └── LogErrorTask.java │ │ │ ├── exceptions │ │ │ └── InvalidCategoryNameException.java │ │ │ ├── WorldScribeApplication.java │ │ │ ├── views │ │ │ ├── BottomBarActivity.java │ │ │ ├── ArticleSectionCollapser.java │ │ │ └── MarqueeToolbar.java │ │ │ ├── Connection.java │ │ │ ├── activities │ │ │ ├── CreateOrLoadWorldActivity.java │ │ │ ├── BackButtonActivity.java │ │ │ ├── ThemedActivity.java │ │ │ ├── PrivacyPolicyActivity.java │ │ │ ├── NextcloudLoginActivity.java │ │ │ ├── LoadWorldActivity.java │ │ │ └── ReaderModeActivity.java │ │ │ ├── Residence.java │ │ │ ├── viewmodels │ │ │ ├── GroupViewModel.java │ │ │ ├── ArticleListViewModel.java │ │ │ ├── SelectArticleViewModel.java │ │ │ ├── PlaceViewModel.java │ │ │ └── PersonViewModel.java │ │ │ ├── Membership.java │ │ │ ├── LinkedArticleList.java │ │ │ └── Category.java │ │ └── clouds │ │ └── CloudActivity.java ├── proguard-rules.pro └── build.gradle ├── Flipper ├── flipper │ ├── .gitignore │ ├── src │ │ └── main │ │ │ ├── res │ │ │ └── values │ │ │ │ └── strings.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── balda │ │ │ └── flipper │ │ │ ├── OperationFailedException.java │ │ │ ├── MediaStoreCompatException.java │ │ │ └── FileDescription.java │ ├── build.gradle │ └── proguard-rules.pro ├── settings.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── .gitignore ├── build.gradle ├── LICENSE ├── gradle.properties └── gradlew.bat ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── settings.gradle ├── .gitignore ├── gradle.properties ├── LICENSE ├── README.md └── gradlew.bat /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Flipper/flipper/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Flipper/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':flipper' 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | include ':flipper' 4 | project(':flipper').projectDir = new File('./Flipper/flipper') -------------------------------------------------------------------------------- /Flipper/flipper/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Flipper 3 | 4 | -------------------------------------------------------------------------------- /Flipper/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/Flipper/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/edit_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/edit_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/erase_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/erase_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/items_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/items_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/edit_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/edit_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/erase_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/erase_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/items_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/items_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/edit_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/edit_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/add_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/add_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/back_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/back_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/blank_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/blank_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/editor_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/editor_mode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/groups_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/groups_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/people_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/people_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/places_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/places_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/reader_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/reader_mode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/add_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/add_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/back_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/back_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/blank_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/blank_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/editor_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/editor_mode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/groups_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/groups_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/people_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/people_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/places_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/places_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/reader_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/reader_mode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/add_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/add_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/back_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/back_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/editor_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/editor_mode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/erase_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/erase_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/groups_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/groups_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/items_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/items_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/people_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/people_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/places_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/places_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/reader_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/reader_mode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/concepts_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/concepts_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/delete_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/delete_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/overflow_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/overflow_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/rename_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/rename_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/search_articles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/search_articles.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/concepts_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/concepts_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/delete_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/delete_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/overflow_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/overflow_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/rename_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/rename_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/search_articles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/search_articles.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/blank_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/blank_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/concepts_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/concepts_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/delete_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/delete_article.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/rename_article.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/rename_article.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .idea 10 | -------------------------------------------------------------------------------- /Flipper/flipper/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/connection_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/connection_arrows.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/membership_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/membership_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/unset_image_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/unset_image_group.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/unset_image_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/unset_image_item.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/unset_image_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/unset_image_place.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/connection_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/connection_arrows.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/membership_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/membership_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/unset_image_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/unset_image_group.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/unset_image_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/unset_image_item.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/unset_image_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/unset_image_place.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/membership_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/membership_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/overflow_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/overflow_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/search_articles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/search_articles.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/unset_image_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/unset_image_item.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/unset_image_concept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-hdpi/unset_image_concept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/unset_image_concept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-mdpi/unset_image_concept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/connection_arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/connection_arrows.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/unset_image_concept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/unset_image_concept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/unset_image_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/unset_image_group.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/unset_image_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/drawable-xhdpi/unset_image_place.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/worldscribe_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/mipmap-hdpi/worldscribe_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/worldscribe_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/mipmap-mdpi/worldscribe_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/worldscribe_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/mipmap-xhdpi/worldscribe_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/worldscribe_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/mipmap-xxhdpi/worldscribe_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/worldscribe_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarquisLP/World-Scribe/HEAD/app/src/main/res/mipmap-xxxhdpi/worldscribe_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9999999 4 | -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/GenericFileProvider.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe; 2 | 3 | import androidx.core.content.FileProvider; 4 | 5 | public class GenericFileProvider extends FileProvider { 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #06a507 4 | #66ca6d 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/Gender.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe; 2 | 3 | /** 4 | * Created by mark on 02/06/16. 5 | */ 6 | public enum Gender { 7 | MALE, 8 | FEMALE, 9 | OTHER 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/res/xml/searchable.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/adapters/StringListContext.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.adapters; 2 | 3 | /** 4 | * Created by mark on 23/06/16. 5 | */ 6 | public interface StringListContext { 7 | void respondToListItemSelection(String itemText); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_from_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /Flipper/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Aug 03 14:37:09 CEST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/ErrorLoggingActivity.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities; 2 | 3 | import androidx.documentfile.provider.DocumentFile; 4 | 5 | public interface ErrorLoggingActivity { 6 | void onErrorLoggingCompletion(String errorMessage, DocumentFile errorLogFile); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/textbox_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/textbox_gradient_night_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/no_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/menu/save_edit_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Aug 13 15:44:18 EDT 2019 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-6.7.1-all.zip 7 | distributionSha256Sum=22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/exceptions/InvalidCategoryNameException.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.exceptions; 2 | 3 | /** 4 | * Created by mark on 30/06/16. 5 | */ 6 | public class InvalidCategoryNameException extends RuntimeException { 7 | 8 | public InvalidCategoryNameException(String message) { 9 | super(message); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/clouds/CloudActivity.java: -------------------------------------------------------------------------------- 1 | package clouds; 2 | 3 | public interface CloudActivity { 4 | enum CloudType { 5 | Dropbox, 6 | Nextcloud 7 | } 8 | 9 | void onDropboxNeedsAuthentication(); 10 | void onCloudUploadStart(); 11 | void onCloudUploadSuccess(); 12 | void onCloudUploadFailure(Exception e, String lastFileBeingUploaded); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_selector_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/article_link_selector_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/article_link_selector_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/article_link_selector_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/article_link_selector_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/article_link_selector_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/article_link_selector_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/spinner_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/spinner_item_night_mode.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/select_article_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/theme_list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/adapters/ArticleLinkAdapter.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.adapters; 2 | 3 | import com.averi.worldscribe.LinkedArticleList; 4 | 5 | /** 6 | *

7 | * Created by mark on 31/07/16. 8 | *

9 | * 10 | *

11 | * An Interface for Adapters containing links to Articles. 12 | *

13 | */ 14 | public interface ArticleLinkAdapter { 15 | /** 16 | * @return A list of all linked Articles contained within this Adapter. 17 | */ 18 | public LinkedArticleList getLinkedArticleList(); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/WorldScribeApplication.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.multidex.MultiDexApplication; 6 | 7 | public class WorldScribeApplication extends MultiDexApplication { 8 | private static Context context; 9 | 10 | public void onCreate() { 11 | super.onCreate(); 12 | WorldScribeApplication.context = getApplicationContext(); 13 | } 14 | 15 | public static Context getAppContext() { 16 | return WorldScribeApplication.context; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/views/BottomBarActivity.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.views; 2 | 3 | import com.averi.worldscribe.Category; 4 | 5 | /** 6 | * Created by mark on 23/08/16. 7 | * 8 | * Interface for Activities that contain a {@link BottomBar} View. 9 | */ 10 | public interface BottomBarActivity { 11 | /** 12 | * Responds to the user pressing a Category button on the BottomBar. 13 | * @param category The Category represented by the button that was pressed. 14 | */ 15 | void respondToBottomBarButton(Category category); 16 | } 17 | -------------------------------------------------------------------------------- /Flipper/.gitignore: -------------------------------------------------------------------------------- 1 | #built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # files for the dex VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # generated files 12 | bin/ 13 | gen/ 14 | 15 | # Local configuration file (sdk path, etc) 16 | local.properties 17 | 18 | # Windows thumbnail db 19 | Thumbs.db 20 | 21 | # OSX files 22 | .DS_Store 23 | 24 | .directory 25 | 26 | # Eclipse project files 27 | .classpath 28 | .project 29 | 30 | # Android Studio 31 | .idea 32 | #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. 33 | .gradle 34 | build/ 35 | -------------------------------------------------------------------------------- /Flipper/flipper/src/main/java/com/balda/flipper/OperationFailedException.java: -------------------------------------------------------------------------------- 1 | package com.balda.flipper; 2 | 3 | @SuppressWarnings("unused") 4 | public class OperationFailedException extends RuntimeException { 5 | public OperationFailedException() { 6 | super(); 7 | } 8 | 9 | public OperationFailedException(String message) { 10 | super(message); 11 | } 12 | 13 | public OperationFailedException(String message, Throwable cause) { 14 | super(message, cause); 15 | } 16 | 17 | public OperationFailedException(Throwable cause) { 18 | super(cause); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0094ff 4 | #7fc9ff 5 | #ff9800 6 | #ffc400 7 | #9124f0 8 | #af81f9 9 | #ef0a1a 10 | #fc7668 11 | #666666 12 | #999999 13 | #222222 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | -------------------------------------------------------------------------------- /Flipper/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 | google() 6 | jcenter() 7 | 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.4.2' 11 | 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | jcenter() 21 | 22 | } 23 | } 24 | 25 | task clean(type: Delete) { 26 | delete rootProject.buildDir 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/res/menu/snippet_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /Flipper/flipper/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 29 5 | 6 | 7 | defaultConfig { 8 | minSdkVersion 19 9 | targetSdkVersion 29 10 | versionCode 1 11 | versionName "1.0" 12 | } 13 | 14 | buildTypes { 15 | release { 16 | minifyEnabled true 17 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | 21 | } 22 | 23 | dependencies { 24 | implementation fileTree(dir: 'libs', include: ['*.jar']) 25 | implementation 'androidx.appcompat:appcompat:1.0.2' 26 | implementation 'androidx.preference:preference:1.0.0' 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/Connection.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created by mark on 02/07/16. 7 | */ 8 | public class Connection implements Serializable, Comparable { 9 | public String worldName; 10 | public Category articleCategory; 11 | public String articleName; 12 | public String articleRelation; 13 | public Category connectedArticleCategory; 14 | public String connectedArticleName; 15 | public String connectedArticleRelation; 16 | 17 | @Override 18 | public int compareTo(Connection other) { 19 | return this.connectedArticleName.compareTo(other.connectedArticleName); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /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 /home/mark/Android/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/main/res/layout/layout_dropbox_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /Flipper/flipper/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/IntentFields.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities; 2 | 3 | /** 4 | * Created by mark on 29/07/16. 5 | * 6 | * Contains the names of fields that are passed between Activities via Intents. 7 | */ 8 | public class IntentFields { 9 | public static final String WORLD_NAME = "worldName"; 10 | public static final String CATEGORY = "category"; 11 | public static final String ARTICLE_NAME = "articleName"; 12 | public static final String SNIPPET_NAME = "snippetName"; 13 | public static final String CONNECTION = "connection"; 14 | public static final String EXISTING_LINKS = "existingLinks"; 15 | public static final String MAIN_ARTICLE_CATEGORY = "mainArticleCategory"; 16 | public static final String MAIN_ARTICLE_NAME = "mainArticleName"; 17 | public static final String MEMBERSHIP = "membership"; 18 | } 19 | -------------------------------------------------------------------------------- /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 | android.enableJetifier=true 20 | android.useAndroidX=true -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/tasks/LoadResourceImageTask.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities.tasks; 2 | 3 | import android.content.Context; 4 | import android.graphics.Bitmap; 5 | import android.graphics.BitmapFactory; 6 | 7 | import com.averi.worldscribe.WorldScribeApplication; 8 | 9 | import java.util.concurrent.Callable; 10 | 11 | public class LoadResourceImageTask implements Callable { 12 | private final int imageResourceID; 13 | 14 | /** 15 | * Instantiates a LoadResourceImageTask for retrieving a local resource 16 | * image as a Bitmap. 17 | * @param imageResourceID The resource ID of the image to load. 18 | */ 19 | public LoadResourceImageTask(int imageResourceID) { 20 | this.imageResourceID = imageResourceID; 21 | } 22 | 23 | @Override 24 | public Bitmap call() throws Exception { 25 | Context context = WorldScribeApplication.getAppContext(); 26 | return BitmapFactory.decodeResource(context.getResources(), imageResourceID); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/tasks/CreateWorldTask.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities.tasks; 2 | 3 | import android.content.Context; 4 | 5 | import com.averi.worldscribe.WorldScribeApplication; 6 | import com.averi.worldscribe.utilities.ExternalWriter; 7 | 8 | import java.io.IOException; 9 | import java.util.concurrent.Callable; 10 | 11 | public class CreateWorldTask implements Callable { 12 | private final String worldName; 13 | 14 | /** 15 | * Instantiates a CreateWorldTask for creating a new World's folder and subfolders. 16 | * @param worldName The name of the World to create 17 | */ 18 | public CreateWorldTask(String worldName) { 19 | this.worldName = worldName; 20 | } 21 | 22 | @Override 23 | public Void call() throws IOException { 24 | Context context = WorldScribeApplication.getAppContext(); 25 | 26 | if (ExternalWriter.createWorldDirectory(context, worldName) == null) { 27 | throw new IOException("Failed to create folder at 'WorldScribe" + worldName + "'"); 28 | } 29 | 30 | return null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Flipper/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Marco Stornelli 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Mark Padilla 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Flipper/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/activities/CreateOrLoadWorldActivity.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.activities; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | 8 | import com.averi.worldscribe.R; 9 | 10 | public class CreateOrLoadWorldActivity extends ThemedActivity { 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | } 16 | 17 | @Override 18 | protected int getLayoutResourceID() { 19 | return R.layout.activity_create_or_load_world; 20 | } 21 | 22 | @Override 23 | protected ViewGroup getRootLayout() { 24 | return (ViewGroup) findViewById(R.id.root); 25 | } 26 | 27 | public void clickCreate(View view ) { 28 | Intent goToWorldCreationIntent = new Intent(this, CreateWorldActivity.class); 29 | startActivity(goToWorldCreationIntent); 30 | } 31 | 32 | public void clickLoad(View view) { 33 | Intent goToLoadWorldIntent = new Intent(this, LoadWorldActivity.class); 34 | startActivity(goToLoadWorldIntent); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/tasks/RenameWorldTask.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities.tasks; 2 | 3 | import androidx.documentfile.provider.DocumentFile; 4 | 5 | import java.io.IOException; 6 | import java.util.concurrent.Callable; 7 | 8 | public class RenameWorldTask implements Callable { 9 | private final String currentWorldName; 10 | private final String newWorldName; 11 | 12 | public RenameWorldTask(String currentWorldName, String newWorldName) { 13 | this.currentWorldName = currentWorldName; 14 | this.newWorldName = newWorldName; 15 | } 16 | 17 | @Override 18 | public Void call() throws IOException { 19 | DocumentFile worldFolder = TaskUtils.getFolder(currentWorldName, false); 20 | if (worldFolder == null) { 21 | throw new IOException("Could not access folder at 'WorldScribe/" + currentWorldName + "'"); 22 | } 23 | 24 | if (!(worldFolder.renameTo(newWorldName))) { 25 | throw new IOException("Failed to rename 'WorldScribe/" + currentWorldName + "' to + 'WorldScribe/" + newWorldName + "'"); 26 | } 27 | 28 | return null; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/ThemedSnackbar.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities; 2 | 3 | import android.content.Context; 4 | import android.graphics.Color; 5 | import com.google.android.material.snackbar.Snackbar; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | import com.averi.worldscribe.R; 10 | 11 | /** 12 | * Created by mark on 20/06/16. 13 | */ 14 | public class ThemedSnackbar { 15 | /** 16 | * The maximum number of lines that can be displayed by a Snackbar message. 17 | */ 18 | public static final int SNACKBAR_MAX_LINES = 5; 19 | 20 | public static void showSnackbarMessage(Context context, View parentView, String message) { 21 | Snackbar snackbar = Snackbar 22 | .make(parentView, message, Snackbar.LENGTH_LONG); 23 | View snackbarView = snackbar.getView(); 24 | snackbarView.setBackgroundColor(AttributeGetter.getColorAttribute(context, R.attr.colorPrimary)); 25 | TextView textView = (TextView) snackbarView.findViewById(R.id.snackbar_text); 26 | textView.setTextColor(Color.WHITE); 27 | textView.setMaxLines(SNACKBAR_MAX_LINES); 28 | snackbar.show(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/tasks/DeleteWorldTask.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities.tasks; 2 | 3 | import androidx.documentfile.provider.DocumentFile; 4 | 5 | import com.averi.worldscribe.utilities.ExternalDeleter; 6 | 7 | import java.io.IOException; 8 | import java.util.concurrent.Callable; 9 | 10 | public class DeleteWorldTask implements Callable { 11 | private final String worldName; 12 | 13 | /** 14 | * Instantiates a DeleteWorldTask for deleting a World's folder. 15 | * @param worldName The name of the World to delete 16 | */ 17 | public DeleteWorldTask(String worldName) { 18 | this.worldName = worldName; 19 | } 20 | 21 | @Override 22 | public Void call() throws IOException { 23 | DocumentFile worldFolder = TaskUtils.getFolder(worldName, false); 24 | if (worldFolder == null) { 25 | throw new IOException("Could not access folder at 'WorldScribe/" + worldName + "'"); 26 | } 27 | 28 | if (!ExternalDeleter.deleteRecursive(worldFolder)) { 29 | throw new IOException("Failed to delete folder at 'WorldScribe/" + worldName + "'"); 30 | } 31 | 32 | return null; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/rename_snippet_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 17 | 18 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/menu/article_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | 26 | 27 | 33 | 34 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/tasks/CreateArticleTask.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities.tasks; 2 | 3 | import android.content.Context; 4 | 5 | import com.averi.worldscribe.Category; 6 | import com.averi.worldscribe.WorldScribeApplication; 7 | import com.averi.worldscribe.utilities.ExternalWriter; 8 | 9 | import java.util.concurrent.Callable; 10 | 11 | public class CreateArticleTask implements Callable { 12 | private final String worldName; 13 | private final Category category; 14 | private final String articleName; 15 | 16 | /** 17 | * Instantiates a new CreateArticleTask for creating a new Article's folder and subfolders. 18 | * @param worldName The name of the World the Article will belong to 19 | * @param category The Category of the new Article 20 | * @param articleName The new Article's name 21 | */ 22 | public CreateArticleTask(String worldName, Category category, String articleName) { 23 | this.worldName = worldName; 24 | this.category = category; 25 | this.articleName = articleName; 26 | } 27 | 28 | @Override 29 | public Void call() throws Exception { 30 | Context context = WorldScribeApplication.getAppContext(); 31 | ExternalWriter.createArticleDirectory(context, worldName, category, articleName); 32 | return null; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/Residence.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe; 2 | 3 | import java.util.Comparator; 4 | 5 | /** 6 | * Created by mark on 05/08/16. 7 | * A class containing data on a Person's residence within a certain Place. 8 | */ 9 | public class Residence { 10 | /** 11 | * The name of the World containing the Place and resident. 12 | */ 13 | public String worldName; 14 | /** 15 | * The name of the Place of residence. 16 | */ 17 | public String placeName; 18 | /** 19 | * The name of the Person taking residence. 20 | */ 21 | public String residentName; 22 | 23 | /** 24 | * A Comparator that compares the place names between two Residences. 25 | */ 26 | public static class ByPlaceNameComparator implements Comparator { 27 | @Override 28 | public int compare(Residence residence, Residence t1) { 29 | return residence.placeName.compareTo(t1.placeName); 30 | } 31 | } 32 | 33 | /** 34 | * A Comparator that compares the resident names between two Residences. 35 | */ 36 | public static class ByResidentNameComparator implements Comparator { 37 | @Override 38 | public int compare(Residence residence, Residence t1) { 39 | return residence.residentName.compareTo(t1.residentName); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/utilities/TaskRunner.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.utilities; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | import java.util.concurrent.Callable; 7 | import java.util.concurrent.Executor; 8 | import java.util.concurrent.LinkedBlockingQueue; 9 | import java.util.concurrent.ThreadPoolExecutor; 10 | import java.util.concurrent.TimeUnit; 11 | 12 | public class TaskRunner { 13 | private static final Executor THREAD_POOL_EXECUTOR = 14 | new ThreadPoolExecutor(5, 128, 1, 15 | TimeUnit.SECONDS, new LinkedBlockingQueue()); 16 | private final Handler handler = new Handler(Looper.getMainLooper()); 17 | 18 | public interface Callback { 19 | void onComplete(R result); 20 | } 21 | 22 | public interface ErrorCallback { 23 | void onError(Exception exception); 24 | } 25 | 26 | public void executeAsync(Callable callable, Callback callback, ErrorCallback errorCallback) { 27 | THREAD_POOL_EXECUTOR.execute(() -> { 28 | final R result; 29 | 30 | try { 31 | result = callable.call(); 32 | } 33 | catch (Exception exception) { 34 | errorCallback.onError(exception); 35 | return; 36 | } 37 | 38 | handler.post(() -> { 39 | callback.onComplete(result); 40 | }); 41 | }); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/announcements_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 20 | 21 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/averi/worldscribe/viewmodels/GroupViewModel.java: -------------------------------------------------------------------------------- 1 | package com.averi.worldscribe.viewmodels; 2 | 3 | import android.util.Log; 4 | 5 | import androidx.lifecycle.MutableLiveData; 6 | import androidx.lifecycle.ViewModel; 7 | 8 | import com.averi.worldscribe.Category; 9 | import com.averi.worldscribe.Membership; 10 | import com.averi.worldscribe.utilities.TaskRunner; 11 | import com.averi.worldscribe.utilities.tasks.GetMembershipsTask; 12 | 13 | import java.util.ArrayList; 14 | 15 | public class GroupViewModel extends ViewModel { 16 | private final TaskRunner taskRunner = new TaskRunner(); 17 | private final MutableLiveData> members = new MutableLiveData<>(null); 18 | private final MutableLiveData errorMessage = new MutableLiveData<>(""); 19 | 20 | public MutableLiveData> getMembers() { 21 | return members; 22 | } 23 | 24 | public void loadMembers(String worldName, String groupName) { 25 | members.postValue(null); 26 | taskRunner.executeAsync(new GetMembershipsTask(worldName, Category.Group, groupName), 27 | members::postValue, this::handleLoadError); 28 | } 29 | 30 | public MutableLiveData getErrorMessage() { 31 | return errorMessage; 32 | } 33 | 34 | public void clearErrorMessage() { 35 | errorMessage.postValue(""); 36 | } 37 | 38 | private void handleLoadError(Exception exception) { 39 | errorMessage.postValue(Log.getStackTraceString(exception)); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/changelog_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 20 | 21 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/rename_world_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 17 | 18 | 28 | 29 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/rename_article_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | 19 | 29 | 30 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_create_or_load_world.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 |