├── .gitignore ├── J2OBJCSIZES.md ├── README.md ├── app ├── .gitignore ├── build.gradle ├── debug.keystore ├── fabric.properties ├── google-services.json ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lint.xml ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── dataseed.json │ │ ├── font │ │ │ ├── Sabota-Inline.otf │ │ │ └── Sabota.otf │ │ └── sponsors │ │ │ ├── amex.png │ │ │ ├── appgrade.png │ │ │ ├── bignerdranch.png │ │ │ ├── branch.png │ │ │ ├── commonsware.png │ │ │ ├── couchbase.png │ │ │ ├── couchbasetall.png │ │ │ ├── dramafever.png │ │ │ ├── facebook.png │ │ │ ├── firebase.png │ │ │ ├── firebasebrandingr4final.png │ │ │ ├── generalassembly.png │ │ │ ├── genymobile.png │ │ │ ├── google.png │ │ │ ├── ibm.png │ │ │ ├── lyft.png │ │ │ ├── microsoft.png │ │ │ ├── mirego.png │ │ │ ├── nimble.png │ │ │ ├── paypal.png │ │ │ ├── pluralsight.png │ │ │ ├── priceline.png │ │ │ ├── sympli.png │ │ │ ├── tumblr.png │ │ │ ├── twilio.png │ │ │ ├── uber.png │ │ │ └── veloxity.png │ ├── ic_launcher-web.png │ ├── java │ │ └── co │ │ │ └── touchlab │ │ │ └── droidconandroid │ │ │ ├── CrashReport.java │ │ │ ├── DroidconApplication.java │ │ │ ├── shared │ │ │ ├── dagger │ │ │ │ ├── AmazonServer.java │ │ │ │ ├── AppComponent.java │ │ │ │ ├── AppModule.java │ │ │ │ ├── DroidconServer.java │ │ │ │ └── NetworkModule.java │ │ │ ├── data │ │ │ │ ├── AppPrefs.java │ │ │ │ ├── Block.java │ │ │ │ ├── DatabaseHelper.java │ │ │ │ ├── DroidconDatabase.java │ │ │ │ ├── Event.java │ │ │ │ ├── EventInfo.java │ │ │ │ ├── EventSpeaker.java │ │ │ │ ├── TimeBlock.java │ │ │ │ ├── Track.java │ │ │ │ ├── UserAccount.java │ │ │ │ ├── Venue.java │ │ │ │ └── dao │ │ │ │ │ ├── BlockDao.java │ │ │ │ │ ├── EventDao.java │ │ │ │ │ ├── EventSpeakerDao.java │ │ │ │ │ └── UserAccountDao.java │ │ │ ├── interactors │ │ │ │ ├── EventDetailInteractor.java │ │ │ │ ├── FindUserInteractor.java │ │ │ │ ├── RefreshScheduleInteractor.java │ │ │ │ ├── RsvpInteractor.java │ │ │ │ ├── SeedInteractor.java │ │ │ │ └── SponsorsInteractor.java │ │ │ ├── ios │ │ │ │ ├── IosFirebase.java │ │ │ │ └── IosPlatformClient.java │ │ │ ├── network │ │ │ │ ├── FindUserRequest.java │ │ │ │ ├── RefreshScheduleDataRequest.java │ │ │ │ ├── RsvpRequest.java │ │ │ │ ├── SponsorsRequest.java │ │ │ │ └── dao │ │ │ │ │ ├── Convention.java │ │ │ │ │ ├── JustId.java │ │ │ │ │ ├── NetworkEvent.java │ │ │ │ │ ├── NetworkUserAccount.java │ │ │ │ │ ├── NetworkVenue.java │ │ │ │ │ ├── SponsorsResult.java │ │ │ │ │ └── UserInfoResponse.java │ │ │ ├── utils │ │ │ │ ├── AnalyticsEvents.java │ │ │ │ ├── AnalyticsHelper.java │ │ │ │ ├── EmojiUtil.java │ │ │ │ ├── EventUtils.java │ │ │ │ ├── IOUtils.java │ │ │ │ ├── StringUtils.java │ │ │ │ └── TimeUtils.java │ │ │ └── viewmodel │ │ │ │ ├── AppManager.java │ │ │ │ ├── ConferenceDataHelper.java │ │ │ │ ├── ConferenceDataViewModel.java │ │ │ │ ├── DaySchedule.java │ │ │ │ ├── EventDetailViewModel.java │ │ │ │ ├── HourBlock.java │ │ │ │ ├── LoadDataSeed.java │ │ │ │ ├── PlatformClient.java │ │ │ │ ├── ScheduleDataViewModel.java │ │ │ │ ├── SponsorsViewModel.java │ │ │ │ └── UserDetailViewModel.java │ │ │ └── utils │ │ │ └── Toaster.java │ ├── kotlin │ │ └── co │ │ │ └── touchlab │ │ │ └── droidconandroid │ │ │ ├── AboutActivity.kt │ │ │ ├── EventDetailActivity.kt │ │ │ ├── EventDetailAdapter.kt │ │ │ ├── EventDetailFragment.kt │ │ │ ├── Extension.kt │ │ │ ├── ScheduleActivity.kt │ │ │ ├── ScheduleDataFragment.kt │ │ │ ├── SponsorsActivity.kt │ │ │ ├── SponsorsListFragment.kt │ │ │ ├── SquareImageView.kt │ │ │ ├── UserDetailActivity.kt │ │ │ ├── UserDetailFragment.kt │ │ │ ├── WelcomeActivity.kt │ │ │ ├── WelcomeFragment.kt │ │ │ ├── alerts │ │ │ ├── AlertReceiver.kt │ │ │ ├── NotificationService.kt │ │ │ └── NotificationUtils.kt │ │ │ └── ui │ │ │ ├── AboutAdapter.kt │ │ │ ├── DrawerAdapter.kt │ │ │ ├── EventAdapter.kt │ │ │ ├── SabotaToolbarTitle.kt │ │ │ ├── ScheduleFragmentPagerAdapter.kt │ │ │ ├── SponsorFragmentPagerAdapter.kt │ │ │ ├── SponsorsAdapter.kt │ │ │ └── WelcomePagerAdapter.kt │ └── res │ │ ├── anim-v21 │ │ └── lift.xml │ │ ├── color │ │ ├── selectable_text_black.xml │ │ ├── selector_blue.xml │ │ ├── selector_orange.xml │ │ └── selector_pink.xml │ │ ├── drawable-hdpi │ │ └── ic_notification_smallicon_color.png │ │ ├── drawable-ldpi │ │ └── ic_notification_smallicon_color.png │ │ ├── drawable-mdpi │ │ └── ic_notification_smallicon_color.png │ │ ├── drawable-xhdpi │ │ └── ic_notification_smallicon_color.png │ │ ├── drawable-xxhdpi │ │ ├── bannerback.png │ │ ├── dopplpng.png │ │ ├── drawerback.png │ │ ├── droidconlogo.png │ │ ├── eventback.png │ │ ├── ic_notification_smallicon_color.png │ │ └── tllogopadding.png │ │ ├── drawable-xxxhdpi │ │ └── ic_notification_smallicon_color.png │ │ ├── drawable │ │ ├── binkylegs.jpg │ │ ├── circle_profile_placeholder.xml │ │ ├── custom_ratingbar.xml │ │ ├── div_empty_16dp.xml │ │ ├── ic_back.xml │ │ ├── ic_check.xml │ │ ├── ic_description_black_24dp.xml │ │ ├── ic_launch_black_24dp.xml │ │ ├── ic_play_24dp.xml │ │ ├── ic_plus.xml │ │ ├── ic_videocam_black_24dp.xml │ │ ├── placeholder_sponsor_image.xml │ │ ├── superglyph_outline360x114dp.xml │ │ ├── vic_account_circle_black_24dp.xml │ │ ├── vic_bio_black_24dp.xml │ │ ├── vic_clock_black_24dp.xml │ │ ├── vic_company_black_24dp.xml │ │ ├── vic_email_black_24dp.xml │ │ ├── vic_event_black_24dp.xml │ │ ├── vic_facebook_24dp.xml │ │ ├── vic_gplus_24dp.xml │ │ ├── vic_info_outline_black_24dp.xml │ │ ├── vic_linkedin_24dp.xml │ │ ├── vic_notifications_active_black_24dp.xml │ │ ├── vic_notifications_none_black_24dp.xml │ │ ├── vic_person_add_black_24dp.xml │ │ ├── vic_phone_black_24dp.xml │ │ ├── vic_slack_24dp.xml │ │ ├── vic_star_circle.xml │ │ ├── vic_twitter_24dp.xml │ │ ├── vic_website_black_24dp.xml │ │ ├── welcome_0.xml │ │ └── welcome_1.xml │ │ ├── layout-w820dp-land │ │ └── activity_schedule.xml │ │ ├── layout │ │ ├── activity_about.xml │ │ ├── activity_event_detail.xml │ │ ├── activity_main_home.xml │ │ ├── activity_schedule.xml │ │ ├── activity_sponsors.xml │ │ ├── activity_user_detail.xml │ │ ├── activity_welcome.xml │ │ ├── fragment_event_detail.xml │ │ ├── fragment_schedule_data.xml │ │ ├── fragment_speaker_detail.xml │ │ ├── fragment_sponsors_list.xml │ │ ├── fragment_welcome.xml │ │ ├── item_about.xml │ │ ├── item_block.xml │ │ ├── item_drawer.xml │ │ ├── item_drawer_divider.xml │ │ ├── item_drawer_header.xml │ │ ├── item_empty.xml │ │ ├── item_event.xml │ │ ├── item_event_feedback.xml │ │ ├── item_event_header.xml │ │ ├── item_event_info.xml │ │ ├── item_event_text.xml │ │ ├── item_new_row.xml │ │ ├── item_speaker_summary.xml │ │ └── item_sponsor.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ └── ic_notification.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ └── ic_notification.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_launcher_round.png │ │ └── ic_notification.png │ │ ├── values-land-v21 │ │ └── dimens.xml │ │ ├── values-land │ │ └── dimens.xml │ │ ├── values-v21 │ │ └── dimens.xml │ │ ├── values-w600dp-land-v21 │ │ └── dimens.xml │ │ ├── values-w600dp-land │ │ └── dimens.xml │ │ ├── values-w600dp │ │ └── dimens.xml │ │ ├── values-w820dp-land │ │ ├── booleans.xml │ │ └── dimens.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── booleans.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── co │ └── touchlab │ └── droidconandroid │ └── shared │ ├── OneTest.java │ └── viewmodel │ ├── ConferenceViewModelTest.java │ └── UserDetailViewModelTest.java ├── build.gradle ├── docs └── findworkspace.gif ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── ios ├── .gitignore ├── Podfile ├── appcenter-post-clone.sh ├── ios.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── ios.xcscmblueprint │ └── xcshareddata │ │ └── xcschemes │ │ └── iosTestOnly.xcscheme ├── ios.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── ios │ ├── AboutViewController.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── 120-1.png │ │ │ ├── 120-2.png │ │ │ ├── 120.png │ │ │ ├── 180.png │ │ │ ├── AppStore152.png │ │ │ ├── AppStore167.png │ │ │ ├── AppStore58.png │ │ │ ├── AppStore76.png │ │ │ ├── AppStore80-1.png │ │ │ ├── AppStore80.png │ │ │ ├── AppStore87.png │ │ │ ├── Contents.json │ │ │ └── logonoalpha.png │ │ ├── Contents.json │ │ ├── Image.imageset │ │ │ └── Contents.json │ │ ├── ic_account_circle_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_account_circle_white.png │ │ │ ├── ic_account_circle_white_2x.png │ │ │ └── ic_account_circle_white_3x.png │ │ ├── ic_add.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_add.png │ │ │ ├── ic_add_2x.png │ │ │ └── ic_add_3x.png │ │ ├── ic_business_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_business_white.png │ │ │ ├── ic_business_white_2x.png │ │ │ └── ic_business_white_3x.png │ │ ├── ic_description.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_description.png │ │ │ ├── ic_description_2x.png │ │ │ └── ic_description_3x.png │ │ ├── ic_done.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_done.png │ │ │ ├── ic_done_2x.png │ │ │ └── ic_done_3x.png │ │ ├── ic_email_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_email_white.png │ │ │ ├── ic_email_white_2x.png │ │ │ └── ic_email_white_3x.png │ │ ├── ic_facebook.imageset │ │ │ ├── Contents.json │ │ │ └── FB-f-Logo__blue_512.png │ │ ├── ic_gplus.imageset │ │ │ ├── Contents.json │ │ │ ├── btn_google+_dark_normal_ios.png │ │ │ ├── btn_google+_dark_normal_ios@2x.png │ │ │ └── btn_google+_dark_normal_ios@3x.png │ │ ├── ic_info_outline_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_info_outline_white.png │ │ │ ├── ic_info_outline_white_2x.png │ │ │ └── ic_info_outline_white_3x.png │ │ ├── ic_insert_invitation_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_insert_invitation_white.png │ │ │ ├── ic_insert_invitation_white_2x.png │ │ │ └── ic_insert_invitation_white_3x.png │ │ ├── ic_keyboard_arrow_right_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_keyboard_arrow_right_white.png │ │ │ ├── ic_keyboard_arrow_right_white_2x.png │ │ │ └── ic_keyboard_arrow_right_white_3x.png │ │ ├── ic_linked_in.imageset │ │ │ ├── Contents.json │ │ │ └── In-2CRev-128px-TM.png │ │ ├── ic_phone_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_phone_white.png │ │ │ ├── ic_phone_white_2x.png │ │ │ └── ic_phone_white_3x.png │ │ ├── ic_public_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_public_white.png │ │ │ ├── ic_public_white_2x.png │ │ │ └── ic_public_white_3x.png │ │ ├── ic_query_builder_white.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_query_builder_white.png │ │ │ ├── ic_query_builder_white_2x.png │ │ │ └── ic_query_builder_white_3x.png │ │ ├── ic_sponsor.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_sponsor_white.png │ │ │ ├── ic_sponsor_white_2x.png │ │ │ └── ic_sponsor_white_3x.png │ │ ├── ic_twitter.imageset │ │ │ ├── Contents.json │ │ │ └── Twitter_Social_Icon_Rounded_Square_Color.png │ │ ├── ic_videocam.imageset │ │ │ ├── Contents.json │ │ │ ├── ic_videocam.png │ │ │ ├── ic_videocam_2x.png │ │ │ └── ic_videocam_3x.png │ │ ├── illo_beyourself.imageset │ │ │ ├── Contents.json │ │ │ ├── illo_beyourself-1.png │ │ │ ├── illo_beyourself-2.png │ │ │ └── illo_beyourself.png │ │ ├── illo_binky.imageset │ │ │ ├── Contents.json │ │ │ ├── illo_binky-1.png │ │ │ ├── illo_binky-2.png │ │ │ └── illo_binky.png │ │ ├── illo_planahead.imageset │ │ │ ├── Contents.json │ │ │ ├── luluagain-0.png │ │ │ ├── luluagain-1.png │ │ │ └── luluagain-2.png │ │ ├── illo_signin.imageset │ │ │ ├── Contents.json │ │ │ ├── illo_signin.png │ │ │ ├── illo_signin@2x.png │ │ │ └── illo_signin@3x.png │ │ ├── illo_welcome.imageset │ │ │ ├── Contents.json │ │ │ ├── lulu-1.png │ │ │ ├── lulu-2.png │ │ │ └── lulu0.png │ │ └── talkheader.imageset │ │ │ ├── Contents.json │ │ │ ├── droidconsflog-2.png │ │ │ ├── droidconsflogo-0.png │ │ │ └── droidconsflogo-1.png │ ├── Base.lproj │ │ └── Main.storyboard │ ├── Droicon NYC 2016.entitlements │ ├── DroidconTabBarViewController.swift │ ├── EventDetailViewController.swift │ ├── EventTableViewCell.swift │ ├── EventTableViewCell.xib │ ├── Extensions.swift │ ├── GoogleService-Info.plist │ ├── Info.plist │ ├── JavaUtils.swift │ ├── LaunchScreen.storyboard │ ├── LaunchViewController.swift │ ├── ScheduleListCell.swift │ ├── ScheduleViewController.swift │ ├── SpeakerTableViewCell.swift │ ├── SpeakerTableViewCell.xib │ ├── SponsorImage.swift │ ├── SponsorPhotoCell.swift │ ├── SponsorsViewController.swift │ ├── TimeUtils.swift │ ├── UIViewController.swift │ ├── UserDetailViewController.swift │ ├── UserTableViewCell.swift │ ├── UserTableViewCell.xib │ ├── WelcomePageViewController.swift │ ├── WelcomeViewController.swift │ └── dataseeds │ │ └── dataseed.json ├── iosTestOnly │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── iosTestOnlyTests │ ├── Info.plist │ └── iosTestOnlyTests.swift ├── iosTests │ ├── Info.plist │ └── iosTests.m └── iosUITests │ ├── Info.plist │ └── iosUITests.m └── settings.gradle /J2OBJCSIZES.md: -------------------------------------------------------------------------------- 1 | 2.0.10 is 2.0.5 j2objc with -ObjC 2 | 2.0.11 is 2.0.5 j2objc without -ObjC 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | 3 | This is the Droidcon NYC 2017 app. This will deploy on both Android and iOS using [J2objc](https://github.com/google/j2objc) 4 | and the [J2objc Gradle](https://j2objcgradle.github.io/) plugin. Shared architecture and libraries supported by [Doppl libraries](https://doppllib.github.io/). 5 | 6 | The 2017 app is a refactor that updates the application to use more modern architecture and libraries. These include Android Architecture Components, Room DB, RxJava 2, Retrofit 2. 7 | 8 | # CI Status 9 | 10 | CI run on all commits against the Android and iOS builds separately. The J2objc build translates shared code first, then 11 | runs tests against that. 12 | 13 | ## J2objc/iOS 14 | [![Build status](https://build.appcenter.ms/v0.1/apps/75d67777-b806-4d55-9029-4ed199653717/branches/master/badge)](https://appcenter.ms) 15 | 16 | ## Android 17 | [![Build status](https://build.appcenter.ms/v0.1/apps/0b5a4973-92e0-4cac-847f-9fbd62b33d1f/branches/master/badge)](https://appcenter.ms) 18 | 19 | # Getting Started with iOS 20 | 21 | Follow the [J2objc Gradle tutorials](https://j2objcgradle.github.io/basicquickstart.html) to make sure you have j2objc installed and configured. 22 | 23 | Clone the repo (obv) 24 | 25 | Open terminal and run 26 | 27 | ```bash 28 | ./gradlew j2objcBuild 29 | ``` 30 | 31 | This will transform the shared Java code and compile dependencies. 32 | 33 | cd into the ios directory and run 34 | 35 | ```bash 36 | pod install 37 | ``` 38 | 39 | Assuming that goes to plan, in Finder, navigate to the ios directory, and open the ios workspace project for Xcode. Double-click on it. 40 | 41 | ![Finding workspace in Finder](docs/findworkspace.gif) 42 | 43 | Pick a simulator and run app! 44 | 45 | # Getting Started with Android 46 | 47 | The Android app should open and build like any other Android app, which is kind of the point. 48 | 49 | ### BTW 50 | 51 | We've committed some api config files that you probably wouldn't commit to your own production code. fabric.properties and similar. Please 52 | be kind. Just didn't want to add setup steps to try app code. 53 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | release.jks 3 | -------------------------------------------------------------------------------- /app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/debug.keystore -------------------------------------------------------------------------------- /app/fabric.properties: -------------------------------------------------------------------------------- 1 | #Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public. 2 | #Mon Sep 25 08:45:42 EDT 2017 3 | apiSecret=a70308da17e66d33b166e029eabb96754f40e2dd2ec0fefd2a48e1c89e76f7a6 4 | -------------------------------------------------------------------------------- /app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "691358161677", 4 | "firebase_url": "https://droidcon-sf.firebaseio.com", 5 | "project_id": "droidcon-sf", 6 | "storage_bucket": "droidcon-sf.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:691358161677:android:5dd224ba500fa37a", 12 | "android_client_info": { 13 | "package_name": "co.touchlab.droidcon.sf" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "691358161677-fh04b00lsteb8kbfo4nb1lp5isqnn457.apps.googleusercontent.com", 19 | "client_type": 3 20 | } 21 | ], 22 | "api_key": [ 23 | { 24 | "current_key": "AIzaSyB-R_6sUkenbuqQRDr_sqIbEbbhBfQNZJA" 25 | } 26 | ], 27 | "services": { 28 | "analytics_service": { 29 | "status": 1 30 | }, 31 | "appinvite_service": { 32 | "status": 1, 33 | "other_platform_oauth_client": [] 34 | }, 35 | "ads_service": { 36 | "status": 2 37 | } 38 | } 39 | }, 40 | { 41 | "client_info": { 42 | "mobilesdk_app_id": "1:691358161677:android:fc8a6b89467e0b4a", 43 | "android_client_info": { 44 | "package_name": "co.touchlab.droidcon.sf2017" 45 | } 46 | }, 47 | "oauth_client": [ 48 | { 49 | "client_id": "691358161677-fh04b00lsteb8kbfo4nb1lp5isqnn457.apps.googleusercontent.com", 50 | "client_type": 3 51 | } 52 | ], 53 | "api_key": [ 54 | { 55 | "current_key": "AIzaSyB-R_6sUkenbuqQRDr_sqIbEbbhBfQNZJA" 56 | } 57 | ], 58 | "services": { 59 | "analytics_service": { 60 | "status": 1 61 | }, 62 | "appinvite_service": { 63 | "status": 1, 64 | "other_platform_oauth_client": [] 65 | }, 66 | "ads_service": { 67 | "status": 2 68 | } 69 | } 70 | } 71 | ], 72 | "configuration_version": "1" 73 | } -------------------------------------------------------------------------------- /app/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon May 08 10:24:51 EDT 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip 7 | -------------------------------------------------------------------------------- /app/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /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/kgalligan/bin/adt-bundle-mac-x86_64/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/assets/font/Sabota-Inline.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/font/Sabota-Inline.otf -------------------------------------------------------------------------------- /app/src/main/assets/font/Sabota.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/font/Sabota.otf -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/amex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/amex.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/appgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/appgrade.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/bignerdranch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/bignerdranch.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/branch.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/commonsware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/commonsware.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/couchbase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/couchbase.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/couchbasetall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/couchbasetall.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/dramafever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/dramafever.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/facebook.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/firebase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/firebase.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/firebasebrandingr4final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/firebasebrandingr4final.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/generalassembly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/generalassembly.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/genymobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/genymobile.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/google.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/ibm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/ibm.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/lyft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/lyft.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/microsoft.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/mirego.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/mirego.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/nimble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/nimble.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/paypal.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/pluralsight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/pluralsight.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/priceline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/priceline.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/sympli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/sympli.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/tumblr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/tumblr.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/twilio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/twilio.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/uber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/uber.png -------------------------------------------------------------------------------- /app/src/main/assets/sponsors/veloxity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/assets/sponsors/veloxity.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/CrashReport.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid; 2 | 3 | import co.touchlab.droidconandroid.shared.viewmodel.AppManager; 4 | 5 | /** 6 | * Created by kgalligan on 4/6/16. 7 | */ 8 | public class CrashReport 9 | { 10 | public static void logException(Throwable t) 11 | { 12 | AppManager.getInstance().getPlatformClient().logException(t); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/dagger/AmazonServer.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.dagger; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Qualifier; 7 | 8 | @Qualifier 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface AmazonServer 11 | { 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/dagger/AppComponent.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.dagger; 2 | 3 | import javax.inject.Singleton; 4 | 5 | import co.touchlab.droidconandroid.shared.data.AppPrefs; 6 | import co.touchlab.droidconandroid.shared.interactors.RefreshScheduleInteractor; 7 | import co.touchlab.droidconandroid.shared.viewmodel.ConferenceDataViewModel; 8 | import co.touchlab.droidconandroid.shared.viewmodel.EventDetailViewModel; 9 | import co.touchlab.droidconandroid.shared.viewmodel.ScheduleDataViewModel; 10 | import co.touchlab.droidconandroid.shared.interactors.SeedInteractor; 11 | import co.touchlab.droidconandroid.shared.viewmodel.SponsorsViewModel; 12 | import co.touchlab.droidconandroid.shared.viewmodel.UserDetailViewModel; 13 | import dagger.Component; 14 | 15 | 16 | @Singleton 17 | @Component(modules = {AppModule.class, NetworkModule.class}) 18 | public interface AppComponent 19 | { 20 | AppPrefs getPrefs(); 21 | 22 | SeedInteractor seedInteractor(); 23 | 24 | RefreshScheduleInteractor refreshScheduleInteractor(); 25 | 26 | void inject(UserDetailViewModel.Factory target); 27 | 28 | void inject(SponsorsViewModel.Factory target); 29 | 30 | void inject(ScheduleDataViewModel.Factory target); 31 | 32 | void inject(EventDetailViewModel.Factory target); 33 | 34 | void inject(ConferenceDataViewModel.Factory target); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/dagger/AppModule.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.dagger; 2 | 3 | 4 | import android.app.Application; 5 | import android.arch.persistence.room.Room; 6 | import android.content.Context; 7 | 8 | import javax.inject.Singleton; 9 | 10 | import co.touchlab.droidconandroid.shared.data.DroidconDatabase; 11 | import dagger.Module; 12 | import dagger.Provides; 13 | 14 | @Module 15 | public class AppModule 16 | { 17 | private final Application application; 18 | 19 | public AppModule(Application application) 20 | { 21 | this.application = application; 22 | } 23 | 24 | @Provides 25 | Application providesApplication() 26 | { 27 | return application; 28 | } 29 | 30 | @Provides 31 | @Singleton 32 | DroidconDatabase providesDroidconDatabase(Application application) 33 | { 34 | return Room.databaseBuilder(application, DroidconDatabase.class, "droidcon").build(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/dagger/DroidconServer.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.dagger; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Qualifier; 7 | 8 | @Qualifier 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface DroidconServer 11 | { 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/Block.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | 3 | import android.arch.persistence.room.Entity; 4 | import android.arch.persistence.room.PrimaryKey; 5 | 6 | import java.util.Date; 7 | 8 | import co.touchlab.droidconandroid.shared.utils.TimeUtils; 9 | 10 | /** 11 | * Created by izzyoji :) on 8/12/15. 12 | */ 13 | @Entity 14 | public class Block implements TimeBlock 15 | { 16 | @PrimaryKey 17 | public long id; 18 | 19 | public String name; 20 | 21 | public String description; 22 | 23 | public Long startDateLong; 24 | 25 | public Long endDateLong; 26 | 27 | public String startDate; 28 | 29 | public String endDate; 30 | 31 | @Override 32 | public boolean isBlock() 33 | { 34 | return true; 35 | } 36 | 37 | @Override 38 | public Long getStartLong() 39 | { 40 | return startDateLong; 41 | } 42 | 43 | @Override 44 | public Long getEndLong() 45 | { 46 | return endDateLong; 47 | } 48 | 49 | public String getStartFormatted() 50 | { 51 | return TimeUtils.LOCAL_DATE_FORMAT.get().format(new Date(startDateLong)); 52 | } 53 | 54 | public String getEndFormatted() 55 | { 56 | return TimeUtils.LOCAL_DATE_FORMAT.get().format(new Date(endDateLong)); 57 | } 58 | 59 | public String getName() 60 | { 61 | return name; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/DroidconDatabase.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | 3 | import android.arch.persistence.room.Database; 4 | import android.arch.persistence.room.RoomDatabase; 5 | 6 | import co.touchlab.droidconandroid.shared.data.dao.BlockDao; 7 | import co.touchlab.droidconandroid.shared.data.dao.EventDao; 8 | import co.touchlab.droidconandroid.shared.data.dao.EventSpeakerDao; 9 | import co.touchlab.droidconandroid.shared.data.dao.UserAccountDao; 10 | 11 | @Database(entities = { Block.class, Event.class, EventSpeaker.class, UserAccount.class }, version = DroidconDatabase.DATABASE_VERSION) 12 | public abstract class DroidconDatabase extends RoomDatabase { 13 | static final int DATABASE_VERSION = 1; 14 | 15 | abstract BlockDao blockDao(); 16 | 17 | abstract UserAccountDao userAccountDao(); 18 | 19 | abstract EventSpeakerDao eventSpeakerDao(); 20 | 21 | abstract EventDao eventDao(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/EventInfo.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | 3 | import java.util.List; 4 | 5 | public class EventInfo 6 | { 7 | private final Event event; 8 | private final List speakers; 9 | private final boolean conflict; 10 | 11 | public EventInfo(Event event, List speakers, boolean conflict) { 12 | this.event = event; 13 | this.speakers = speakers; 14 | this.conflict = conflict; 15 | } 16 | 17 | public Event getEvent() { 18 | return event; 19 | } 20 | 21 | public List getSpeakers() { 22 | return speakers; 23 | } 24 | 25 | public boolean getConflict() { 26 | return conflict; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/EventSpeaker.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | 3 | import android.arch.persistence.room.ColumnInfo; 4 | import android.arch.persistence.room.Entity; 5 | import android.arch.persistence.room.ForeignKey; 6 | import android.arch.persistence.room.PrimaryKey; 7 | 8 | 9 | /** 10 | * Created by kgalligan on 7/28/14. 11 | */ 12 | @Entity(foreignKeys = { 13 | @ForeignKey(entity = Event.class, parentColumns = "id", childColumns = "event_id", onDelete = ForeignKey.CASCADE), 14 | @ForeignKey(entity = UserAccount.class, parentColumns = "id", childColumns = "user_id", onDelete = ForeignKey.CASCADE) 15 | }) 16 | public class EventSpeaker { 17 | @PrimaryKey(autoGenerate = true) 18 | public Integer id; 19 | 20 | @ColumnInfo(name = "event_id") 21 | public long eventId; 22 | 23 | @ColumnInfo(name = "user_id") 24 | public long userAccountId; 25 | 26 | public String name; 27 | 28 | public int displayOrder; 29 | 30 | public long getEventId() 31 | { 32 | return eventId; 33 | } 34 | 35 | public long getUserAccountId() 36 | { 37 | return userAccountId; 38 | } 39 | 40 | public int getDisplayOrder() { 41 | return displayOrder; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/TimeBlock.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | /** 3 | * Created by izzyoji :) on 8/12/15. 4 | */ 5 | public interface TimeBlock 6 | { 7 | boolean isBlock(); 8 | Long getStartLong(); 9 | Long getEndLong(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/Track.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | import android.text.TextUtils; 3 | 4 | /** 5 | * Created by izzyoji :) on 8/9/15. 6 | */ 7 | public enum Track 8 | { 9 | DEVELOPMENT("Develop", "development", "droidcon_blue", "selector_blue"), 10 | DESIGN("Design", "design", "droidcon_pink", "selector_pink"), 11 | BUSINESS("Business", "business", "orange", "selector_orange"), 12 | DEVDESIGN("Dev/Design", "devdesign", "droidcon_blue", "selector_blue"), 13 | DESIGNLAB("Design Lab", "designlab", "droidcon_blue", "selector_blue"); 14 | 15 | public String getServerName() 16 | { 17 | return serverName; 18 | } 19 | 20 | public String getDisplayNameRes() 21 | { 22 | return displayNameRes; 23 | } 24 | 25 | public String getCheckBoxSelectorRes() 26 | { 27 | return checkBoxSelectorRes; 28 | } 29 | 30 | public String getTextColorRes() 31 | { 32 | return textColorRes; 33 | } 34 | 35 | String serverName; 36 | String displayNameRes; 37 | String textColorRes; 38 | String checkBoxSelectorRes; 39 | 40 | Track(String serverName, String displayNameRes, String textColor, String checkBoxSelector) 41 | { 42 | this.serverName = serverName; 43 | this.displayNameRes = displayNameRes; 44 | this.textColorRes = textColor; 45 | this.checkBoxSelectorRes = checkBoxSelector; 46 | } 47 | 48 | public static Track findByServerName(String serverName) 49 | { 50 | for(Track track : values()) 51 | { 52 | if(TextUtils.equals(track.serverName, serverName)) 53 | { 54 | return track; 55 | } 56 | } 57 | return null; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/Venue.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data; 2 | 3 | /** 4 | * Created by kgalligan on 6/28/14. 5 | */ 6 | public class Venue 7 | { 8 | public String name; 9 | 10 | public String description; 11 | 12 | public String getName() 13 | { 14 | return name; 15 | } 16 | 17 | public void setName(String name) 18 | { 19 | this.name = name; 20 | } 21 | 22 | public String getDescription() 23 | { 24 | return description; 25 | } 26 | 27 | public void setDescription(String description) 28 | { 29 | this.description = description; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/dao/BlockDao.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Delete; 5 | import android.arch.persistence.room.Insert; 6 | import android.arch.persistence.room.OnConflictStrategy; 7 | import android.arch.persistence.room.Query; 8 | 9 | import java.util.List; 10 | 11 | import co.touchlab.droidconandroid.shared.data.Block; 12 | 13 | @Dao 14 | public interface BlockDao { 15 | 16 | @Query("SELECT * FROM Block") 17 | List getBlocks(); 18 | 19 | // Potentially annoying to delete this way, could truncate the table instead 20 | @Delete 21 | void deleteAll(List blocks); 22 | 23 | @Insert(onConflict = OnConflictStrategy.REPLACE) 24 | void createOrUpdate(Block block); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/dao/EventDao.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Delete; 5 | import android.arch.persistence.room.Embedded; 6 | import android.arch.persistence.room.Insert; 7 | import android.arch.persistence.room.OnConflictStrategy; 8 | import android.arch.persistence.room.Query; 9 | import android.arch.persistence.room.Relation; 10 | import android.arch.persistence.room.Update; 11 | 12 | import java.util.List; 13 | 14 | import co.touchlab.droidconandroid.shared.data.Event; 15 | import co.touchlab.droidconandroid.shared.data.EventSpeaker; 16 | import co.touchlab.droidconandroid.shared.data.UserAccount; 17 | import io.reactivex.Flowable; 18 | 19 | @Dao 20 | public interface EventDao { 21 | 22 | @Query("SELECT * FROM Event WHERE id = :eventId") 23 | Event getEventForId(long eventId); 24 | 25 | @Query("SELECT rsvpUuid FROM Event WHERE id = :eventId") 26 | String getRsvpUuidForEventWithId(long eventId); 27 | 28 | @Query("SELECT * FROM Event") 29 | List getEvents(); 30 | 31 | @Insert(onConflict = OnConflictStrategy.REPLACE) 32 | void createOrUpdate(Event event); 33 | 34 | @Update 35 | void updateEvent(Event event); 36 | 37 | @Delete 38 | void deleteAll(List events); 39 | 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/dao/EventSpeakerDao.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Insert; 5 | import android.arch.persistence.room.OnConflictStrategy; 6 | import android.arch.persistence.room.Query; 7 | 8 | import java.util.List; 9 | 10 | import co.touchlab.droidconandroid.shared.data.EventSpeaker; 11 | 12 | @Dao 13 | public interface EventSpeakerDao { 14 | 15 | @Query("SELECT * FROM EventSpeaker WHERE event_id = :eventId") 16 | List getEventSpeakers(long eventId); 17 | 18 | @Query("SELECT * FROM EventSpeaker WHERE event_id = :eventId AND user_id = :userId") 19 | EventSpeaker getSpeakerForEventWithId(long eventId, long userId); 20 | 21 | @Insert(onConflict = OnConflictStrategy.REPLACE) 22 | void createOrUpdate(EventSpeaker eventSpeaker); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/data/dao/UserAccountDao.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.data.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Insert; 5 | import android.arch.persistence.room.OnConflictStrategy; 6 | import android.arch.persistence.room.Query; 7 | 8 | import java.util.List; 9 | 10 | import co.touchlab.droidconandroid.shared.data.UserAccount; 11 | import io.reactivex.Flowable; 12 | 13 | @Dao 14 | public interface UserAccountDao { 15 | 16 | String SELECT_USER = "SELECT * FROM UserAccount WHERE id = :userId"; 17 | 18 | @Query(SELECT_USER) 19 | Flowable flowUserAccount(long userId); 20 | 21 | @Query(SELECT_USER) 22 | UserAccount getUserAccount(long userId); 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | void createOrUpdate(UserAccount userAccount); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/interactors/FindUserInteractor.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.interactors; 2 | 3 | import javax.inject.Inject; 4 | import javax.inject.Singleton; 5 | 6 | import co.touchlab.droidconandroid.CrashReport; 7 | import co.touchlab.droidconandroid.shared.data.DatabaseHelper; 8 | import co.touchlab.droidconandroid.shared.data.UserAccount; 9 | import co.touchlab.droidconandroid.shared.network.FindUserRequest; 10 | import co.touchlab.droidconandroid.shared.network.dao.NetworkUserAccount; 11 | import io.reactivex.Completable; 12 | import io.reactivex.Flowable; 13 | import io.reactivex.Observable; 14 | import io.reactivex.Single; 15 | 16 | /** 17 | * Created by kgalligan on 4/8/16. 18 | */ 19 | @Singleton 20 | public class FindUserInteractor 21 | { 22 | private final DatabaseHelper helper; 23 | private final FindUserRequest request; 24 | 25 | @Inject 26 | public FindUserInteractor(DatabaseHelper helper, FindUserRequest request) 27 | { 28 | this.helper = helper; 29 | this.request = request; 30 | } 31 | 32 | public Flowable loadUserAccount(final long userId) 33 | { 34 | //Try network refresh 35 | request.getUserInfo(userId).flatMap(info -> saveUserResponse(info.user)) 36 | .subscribe(userAccount -> {}, CrashReport::logException); 37 | 38 | return helper.flowUserAccount(userId); 39 | } 40 | 41 | private Observable saveUserResponse(NetworkUserAccount networkUserAccount) 42 | { 43 | final UserAccount newDbUser = new UserAccount(); 44 | helper.userAccountToDb(networkUserAccount, newDbUser); 45 | 46 | return Completable.fromAction(() -> helper.saveUserAccount(newDbUser)) 47 | .andThen(Observable.just(newDbUser)); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/interactors/SeedInteractor.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.interactors; 2 | 3 | 4 | import com.google.gson.Gson; 5 | 6 | import javax.inject.Inject; 7 | import javax.inject.Singleton; 8 | 9 | import co.touchlab.droidconandroid.CrashReport; 10 | import co.touchlab.droidconandroid.shared.data.AppPrefs; 11 | import co.touchlab.droidconandroid.shared.network.dao.Convention; 12 | import co.touchlab.droidconandroid.shared.viewmodel.ConferenceDataHelper; 13 | import co.touchlab.droidconandroid.shared.viewmodel.LoadDataSeed; 14 | import io.reactivex.android.schedulers.AndroidSchedulers; 15 | import io.reactivex.schedulers.Schedulers; 16 | 17 | 18 | import static co.touchlab.droidconandroid.shared.viewmodel.AppManager.FIRST_SEED; 19 | 20 | @Singleton 21 | public class SeedInteractor 22 | { 23 | private final ConferenceDataHelper conferenceDataHelper; 24 | private final AppPrefs appPrefs; 25 | 26 | @Inject 27 | public SeedInteractor(ConferenceDataHelper conferenceDataHelper, AppPrefs appPrefs) 28 | { 29 | this.conferenceDataHelper = conferenceDataHelper; 30 | this.appPrefs = appPrefs; 31 | } 32 | 33 | public void seedDatabase(LoadDataSeed loadDataSeed) 34 | { 35 | if(appPrefs.once(FIRST_SEED)) 36 | { 37 | try 38 | { 39 | final String seed = loadDataSeed.dataSeed(); 40 | conferenceDataHelper.saveConvention(new Gson().fromJson(seed, Convention.class)) 41 | .subscribeOn(Schedulers.io()) 42 | .observeOn(AndroidSchedulers.mainThread()) 43 | .subscribe(() -> 44 | { 45 | }, CrashReport:: logException); 46 | } 47 | catch(RuntimeException e) 48 | { 49 | CrashReport.logException(e); 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/interactors/SponsorsInteractor.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.interactors; 2 | 3 | import javax.inject.Inject; 4 | 5 | import co.touchlab.droidconandroid.shared.network.SponsorsRequest; 6 | import co.touchlab.droidconandroid.shared.network.dao.SponsorsResult; 7 | import io.reactivex.Observable; 8 | import io.reactivex.Single; 9 | 10 | public class SponsorsInteractor 11 | { 12 | public static final int SPONSOR_GENERAL = 0; 13 | public static final int SPONSOR_PARTY = 1; 14 | 15 | private final SponsorsRequest request; 16 | 17 | @Inject 18 | public SponsorsInteractor(SponsorsRequest request) 19 | { 20 | this.request = request; 21 | } 22 | 23 | public Observable getSponsors(int type) 24 | { 25 | String fileName = getFileName(type); 26 | return request.getSponsors(fileName); 27 | } 28 | 29 | private String getFileName(int type) 30 | { 31 | switch(type) 32 | { 33 | case SPONSOR_PARTY: 34 | return "sponsors_party_sf.json"; 35 | default: 36 | return "sponsors_general_sf.json"; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/ios/IosFirebase.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.ios; 2 | import com.google.j2objc.annotations.ObjectiveCName; 3 | 4 | /** 5 | * Created by kgalligan on 9/5/16. 6 | */ 7 | @ObjectiveCName("DCIosFirebase") 8 | public interface IosFirebase 9 | { 10 | void logFirebaseNative(String s); 11 | void logPushFirebaseNative(String s); 12 | void logEvent(String name, String... params); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/FindUserRequest.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network; 2 | 3 | import co.touchlab.droidconandroid.shared.network.dao.UserInfoResponse; 4 | import io.reactivex.Observable; 5 | import io.reactivex.Single; 6 | import retrofit2.http.GET; 7 | import retrofit2.http.Path; 8 | 9 | /** 10 | * Created by kgalligan on 7/26/14. 11 | */ 12 | public interface FindUserRequest { 13 | @GET("/dataTest/findUserById/{userId}") 14 | Observable getUserInfo(@Path("userId") long userId); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/RefreshScheduleDataRequest.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network; 2 | 3 | import co.touchlab.droidconandroid.shared.network.dao.Convention; 4 | import io.reactivex.Observable; 5 | import io.reactivex.Single; 6 | import retrofit2.Call; 7 | import retrofit2.http.GET; 8 | import retrofit2.http.Path; 9 | 10 | /** 11 | * Created by kgalligan on 7/20/14. 12 | */ 13 | public interface RefreshScheduleDataRequest { 14 | @GET("/dataTest/scheduleData/{conventionId}") 15 | Observable getScheduleData(@Path("conventionId") Integer conventionId); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/RsvpRequest.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network; 2 | 3 | 4 | import co.touchlab.droidconandroid.shared.network.dao.JustId; 5 | import io.reactivex.Observable; 6 | import io.reactivex.Single; 7 | import retrofit2.Call; 8 | import retrofit2.http.Field; 9 | import retrofit2.http.FormUrlEncoded; 10 | import retrofit2.http.GET; 11 | import retrofit2.http.POST; 12 | import retrofit2.http.Path; 13 | 14 | /** 15 | * Created by kgalligan on 7/20/14. 16 | */ 17 | public interface RsvpRequest { 18 | @POST("/dataTest/rsvpEventAnon/{id}") 19 | @FormUrlEncoded 20 | Observable rsvp(@Path("id") Long eventId, @Field("uuid") String uuid); 21 | 22 | @POST("/dataTest/unRsvpEventAnon/{id}") 23 | @FormUrlEncoded 24 | Observable unRsvp(@Path("id") Long eventId, @Field("uuid") String uuid); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/SponsorsRequest.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network; 2 | 3 | 4 | import co.touchlab.droidconandroid.shared.network.dao.SponsorsResult; 5 | import io.reactivex.Observable; 6 | import io.reactivex.Single; 7 | import retrofit2.http.GET; 8 | import retrofit2.http.Path; 9 | 10 | /** 11 | * Created by kgalligan on 7/20/14. 12 | */ 13 | public interface SponsorsRequest 14 | { 15 | @GET("/droidconsponsers/{fileName}") 16 | Observable getSponsors(@Path("fileName") String fileName); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/Convention.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import co.touchlab.droidconandroid.shared.data.Block; 9 | 10 | /** 11 | * Created by kgalligan on 7/19/14. 12 | */ 13 | public class Convention 14 | { 15 | public Long id; 16 | public String description; 17 | public String locationName; 18 | 19 | public String startDate; 20 | 21 | public String endDate; 22 | 23 | @NonNull 24 | public List venues = new ArrayList(); 25 | 26 | @NonNull 27 | public List blocks = new ArrayList<>(); 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/JustId.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | 3 | /** 4 | * Very basic reply from server 5 | * 6 | * Created by kgalligan on 8/7/17. 7 | */ 8 | public class JustId 9 | { 10 | private Long id; 11 | 12 | public Long getId() 13 | { 14 | return id; 15 | } 16 | 17 | public void setId(Long id) 18 | { 19 | this.id = id; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/NetworkEvent.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | 3 | import android.arch.persistence.room.Ignore; 4 | 5 | import java.util.List; 6 | 7 | import co.touchlab.droidconandroid.shared.data.Event; 8 | 9 | /** 10 | * Created by kgalligan on 7/19/14. 11 | */ 12 | public class NetworkEvent extends Event 13 | { 14 | @Ignore 15 | public List speakers; 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/NetworkUserAccount.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | /** 3 | * Created by kgalligan on 4/6/16. 4 | */ 5 | public class NetworkUserAccount 6 | { 7 | public Long id; 8 | public String name; 9 | public String profile; 10 | public String avatarKey; 11 | public String userCode; 12 | public String company; 13 | public String twitter; 14 | public String linkedIn; 15 | public String website; 16 | public String email; 17 | public String phone; 18 | public String gPlus; 19 | public String coverKey; 20 | public String facebook; 21 | public Boolean emailPublic; 22 | public Boolean following; 23 | 24 | public String getName() 25 | { 26 | return name; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/NetworkVenue.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | 3 | import android.arch.persistence.room.Ignore; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | 9 | import co.touchlab.droidconandroid.shared.data.Venue; 10 | 11 | /** 12 | * Created by kgalligan on 7/19/14. 13 | */ 14 | public class NetworkVenue extends Venue 15 | { 16 | @Ignore 17 | public List events = new ArrayList(); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/SponsorsResult.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | import java.util.List; 3 | 4 | public class SponsorsResult 5 | { 6 | public int totalSpanCount; 7 | 8 | public List sponsors; 9 | 10 | public class Sponsor 11 | { 12 | public final int spanCount; 13 | public final String sponsorName; 14 | public final String sponsorImage; 15 | public final String sponsorLink; 16 | 17 | public Sponsor(int spanCount, String sponsorName, String sponsorImage, String sponsorLink) 18 | { 19 | this.spanCount = spanCount; 20 | this.sponsorName = sponsorName; 21 | this.sponsorImage = sponsorImage; 22 | this.sponsorLink = sponsorLink; 23 | } 24 | 25 | public int getSpanCount() 26 | { 27 | return spanCount; 28 | } 29 | 30 | public String getSponsorName() 31 | { 32 | return sponsorName; 33 | } 34 | 35 | public String getSponsorImage() 36 | { 37 | return sponsorImage; 38 | } 39 | 40 | public String getSponsorLink() 41 | { 42 | return sponsorLink; 43 | } 44 | } 45 | 46 | 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/network/dao/UserInfoResponse.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.network.dao; 2 | 3 | /** 4 | * Created by kgalligan on 4/6/16. 5 | */ 6 | public class UserInfoResponse 7 | { 8 | public NetworkUserAccount user; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/utils/AnalyticsEvents.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.utils; 2 | /** 3 | * Created by kgalligan on 9/5/16. 4 | */ 5 | public class AnalyticsEvents 6 | { 7 | public static final String PARAM_ITEM_ID = "item_id"; 8 | public static final String PARAM_ITEM_NAME = "item_name"; 9 | 10 | //eventId, name 11 | public static final String OPEN_EVENT = "OPEN_EVENT"; 12 | public static final String RSVP_EVENT = "RSVP_EVENT"; 13 | public static final String UNRSVP_EVENT = "UNRSVP_EVENT"; 14 | public static final String CLICK_SPONSOR = "CLICK_SPONSOR"; 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/utils/AnalyticsHelper.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.utils; 2 | import co.touchlab.droidconandroid.shared.data.Event; 3 | import co.touchlab.droidconandroid.shared.viewmodel.AppManager; 4 | 5 | /** 6 | * Created by sufeizhao on 7/19/17. 7 | */ 8 | 9 | public class AnalyticsHelper 10 | { 11 | public static void recordAnalytics(String analyticsKey) 12 | { 13 | // Do nothing for now 14 | } 15 | 16 | public static void recordAnalytics(String analyticsKey, long eventId) 17 | { 18 | AppManager.getInstance().getPlatformClient() 19 | .logEvent(analyticsKey, AnalyticsEvents.PARAM_ITEM_ID, Long.toString(eventId)); 20 | } 21 | 22 | public static void recordAnalytics(String analyticsKey, Event event) 23 | { 24 | String eventName = event != null ? StringUtils.trimToEmpty(event.getName()) : ""; 25 | AppManager.getInstance().getPlatformClient() 26 | .logEvent(analyticsKey, 27 | AnalyticsEvents.PARAM_ITEM_ID, 28 | Long.toString(event.getId()), 29 | AnalyticsEvents.PARAM_ITEM_NAME, 30 | eventName); 31 | } 32 | } -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/utils/EmojiUtil.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.utils; 2 | import android.text.TextUtils; 3 | 4 | import java.util.Locale; 5 | 6 | /** 7 | * Created by Ramona Harrison 8 | * on 7/13/16. 9 | */ 10 | 11 | public class EmojiUtil 12 | { 13 | public static int DECIMAL_VALUE_A = 97; 14 | 15 | public static int[] EMOJI_ABC = { 16 | 0x1F34E, // apple 17 | 0x1F430, // bunny 18 | 0x1F425, // chick 19 | 0x1F436, // dog 20 | 0x1F60E, // sunglasses 21 | 0x1F438, // frog 22 | 0x1F347, // grapes 23 | 0x1F439, // hamster 24 | 0x1F368, // ice cream 25 | 0x1F456, // jeans 26 | 0x1F428, // koala 27 | 0x1F981, // lion 28 | 0x1F42D, // mouse 29 | 0x1F443, // nose 30 | 0x1F419, // octopus 31 | 0x1F43C, // panda 32 | 0x1F31B, // quarter moon 33 | 0x1F916, // robot 34 | 0x1F575, // spy 35 | 0x1F422, // turtle 36 | 0x1F984, // unicorn 37 | 0x1F596, // vulcan hand 38 | 0x1F349, // watermelon 39 | 0x1F47E, // extraterrestrial 40 | 0x270C, // y hand 41 | 0x1F634 // zzz smiley 42 | }; 43 | 44 | public static String getEmojiForUser(String displayName) 45 | { 46 | int unicode = 0x1F60A; // default smiley 47 | 48 | if(! TextUtils.isEmpty(displayName)) 49 | { 50 | int c = displayName.toLowerCase(Locale.getDefault()).charAt(0) - DECIMAL_VALUE_A; 51 | if(c >= 0 && c < EMOJI_ABC.length) 52 | { 53 | unicode = EMOJI_ABC[c]; 54 | } 55 | } 56 | 57 | return new String(Character.toChars(unicode)); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/utils/IOUtils.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.utils; 2 | import java.io.BufferedReader; 3 | import java.io.ByteArrayOutputStream; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import java.io.InputStreamReader; 7 | import java.io.OutputStream; 8 | import java.io.Reader; 9 | import java.io.StringWriter; 10 | import java.io.Writer; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * Created by kgalligan on 10/29/16. 16 | */ 17 | 18 | public class IOUtils 19 | { 20 | public static String toString(InputStream input) throws IOException 21 | { 22 | StringBuilder buf = new StringBuilder(); 23 | 24 | BufferedReader in = null; 25 | try 26 | { 27 | in = new BufferedReader(new InputStreamReader(input, "UTF-8")); 28 | String str; 29 | 30 | while((str = in.readLine()) != null) 31 | { 32 | buf.append(str); 33 | } 34 | } 35 | finally 36 | { 37 | if(in != null) 38 | in.close(); 39 | } 40 | 41 | return buf.toString(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/utils/StringUtils.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.utils; 2 | 3 | /** 4 | * Created by kgalligan on 10/29/16. 5 | */ 6 | 7 | public class StringUtils 8 | { 9 | public static String trimToEmpty(String s) 10 | { 11 | if(s == null) 12 | return ""; 13 | else 14 | return s.trim(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/viewmodel/AppManager.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.viewmodel; 2 | import android.content.Context; 3 | 4 | import co.touchlab.droidconandroid.shared.dagger.AppComponent; 5 | import co.touchlab.droidconandroid.shared.interactors.SeedInteractor; 6 | 7 | /** 8 | * Created by kgalligan on 4/19/16. 9 | */ 10 | public class AppManager 11 | { 12 | public static final String FIRST_SEED = "FIRST_SEED"; 13 | 14 | private static AppManager instance; 15 | private AppComponent appComponent; 16 | private PlatformClient platformClient; 17 | 18 | private AppManager(Context context, PlatformClient platformClient, AppComponent appComponent) 19 | { 20 | this.appComponent = appComponent; 21 | this.platformClient = platformClient; 22 | } 23 | 24 | public static AppManager getInstance() 25 | { 26 | return instance; 27 | } 28 | 29 | public static void create(Context context, PlatformClient platformClient, AppComponent appComponent) 30 | { 31 | if(instance == null) 32 | { 33 | instance = new AppManager(context, platformClient, appComponent); 34 | } 35 | } 36 | 37 | public void seed(LoadDataSeed loadDataSeed) 38 | { 39 | SeedInteractor seedInteractor = appComponent.seedInteractor(); 40 | seedInteractor.seedDatabase(loadDataSeed); 41 | } 42 | 43 | 44 | public AppComponent getAppComponent() 45 | { 46 | return appComponent; 47 | } 48 | 49 | public PlatformClient getPlatformClient() 50 | { 51 | return platformClient; 52 | } 53 | 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/viewmodel/DaySchedule.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.viewmodel; 2 | 3 | /** 4 | * Created by kgalligan on 4/17/16. 5 | */ 6 | public class DaySchedule 7 | { 8 | private final String dayString; 9 | private final HourBlock[] hourHolders; 10 | 11 | public DaySchedule(String dayString, HourBlock[] hourHolders) 12 | { 13 | this.dayString = dayString; 14 | this.hourHolders = hourHolders; 15 | } 16 | 17 | public String getDayString() 18 | { 19 | return dayString; 20 | } 21 | 22 | public HourBlock[] getHourHolders() 23 | { 24 | return hourHolders; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/viewmodel/HourBlock.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.viewmodel; 2 | 3 | import co.touchlab.droidconandroid.shared.data.TimeBlock; 4 | 5 | /** 6 | * Created by kgalligan on 4/25/16. 7 | */ 8 | public class HourBlock 9 | { 10 | private final String hourStringDisplay; 11 | private final TimeBlock timeBlock; 12 | 13 | public HourBlock(String hourStringDisplay, TimeBlock timeBlock) 14 | { 15 | this.hourStringDisplay = hourStringDisplay; 16 | this.timeBlock = timeBlock; 17 | } 18 | 19 | public String getHourStringDisplay() 20 | { 21 | return hourStringDisplay; 22 | } 23 | 24 | public TimeBlock getTimeBlock() 25 | { 26 | return timeBlock; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/viewmodel/LoadDataSeed.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.viewmodel; 2 | 3 | 4 | public interface LoadDataSeed 5 | { 6 | String dataSeed(); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/shared/viewmodel/PlatformClient.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.viewmodel; 2 | 3 | /** 4 | * Created by kgalligan on 4/6/16. 5 | */ 6 | public interface PlatformClient 7 | { 8 | /** 9 | * Url for droidcon server 10 | * @return 11 | */ 12 | String baseUrl(); 13 | 14 | /** 15 | * ID of convention for app. Different by flavor. 16 | * @return 17 | */ 18 | Integer getConventionId(); 19 | 20 | /** 21 | * Crash logging. Writes but doesn't push remotely. 22 | * @param s 23 | */ 24 | void log(String s); 25 | 26 | /** 27 | * Crash logging. Should push remotely for caught exceptions. 28 | * @param t 29 | */ 30 | void logException(Throwable t); 31 | 32 | /** 33 | * Analytics event. 34 | * @param name 35 | * @param params 36 | */ 37 | void logEvent(String name, String... params); 38 | 39 | /** 40 | * Get a string value for a given id. iOS and Android have slightly different methods of storing 41 | * string resources, but implement the same concept. 42 | * 43 | * @param id 44 | * @return 45 | */ 46 | String getString(String id); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/co/touchlab/droidconandroid/utils/Toaster.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.utils; 2 | 3 | import android.content.Context; 4 | import android.widget.Toast; 5 | 6 | /** 7 | * Created by kgalligan on 7/12/14. 8 | */ 9 | public class Toaster 10 | { 11 | public static void showMessage(Context context, String message) 12 | { 13 | Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 14 | } 15 | 16 | public static void showMessage(Context context, int message) 17 | { 18 | showMessage(context, context.getString(message)); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/AboutActivity.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.v4.content.ContextCompat 7 | import android.support.v7.app.AppCompatActivity 8 | import android.support.v7.widget.LinearLayoutManager 9 | import android.view.MenuItem 10 | import co.touchlab.droidconandroid.shared.viewmodel.AppManager 11 | import co.touchlab.droidconandroid.ui.AboutAdapter 12 | import kotlinx.android.synthetic.main.activity_about.* 13 | 14 | class AboutActivity : AppCompatActivity() { 15 | companion object { 16 | fun callMe(activity: Activity) { 17 | val intent = Intent(activity, AboutActivity::class.java) 18 | activity.startActivity(intent) 19 | } 20 | } 21 | 22 | override fun onCreate(savedInstanceState: Bundle?) { 23 | super.onCreate(savedInstanceState) 24 | setContentView(R.layout.activity_about) 25 | 26 | toolbar.title = "" 27 | setSupportActionBar(toolbar) 28 | supportActionBar?.setDisplayHomeAsUpEnabled(true) 29 | supportActionBar?.setDisplayShowHomeEnabled(true) 30 | // about_backdrop.setColorFilter(ContextCompat.getColor(this, R.color.glyph_foreground_dark)) 31 | about_list_rv.layoutManager = LinearLayoutManager(this) 32 | 33 | val adapter = AboutAdapter(this, AppManager.getInstance().appComponent.prefs) 34 | adapter.add(R.string.about_app_header, 0, R.string.about_app) 35 | adapter.add(R.string.about_doppl_header, R.drawable.dopplpng, R.string.about_doppl) 36 | adapter.add(R.string.about_con_header, R.drawable.droidconlogo, R.string.about_con) 37 | adapter.add(R.string.about_touch_header, R.drawable.tllogopadding, R.string.about_touch) 38 | //Binky's row 39 | adapter.add(null, null, null) 40 | about_list_rv.adapter = adapter 41 | } 42 | 43 | override fun onOptionsItemSelected(item: MenuItem): Boolean { 44 | if (item.itemId == android.R.id.home) 45 | finish() 46 | 47 | return super.onOptionsItemSelected(item) 48 | } 49 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/EventDetailActivity.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import android.content.Intent 6 | import android.os.Bundle 7 | import android.support.v7.app.AppCompatActivity 8 | import android.view.MenuItem 9 | 10 | /** 11 | * Created by kgalligan on 7/27/14. 12 | */ 13 | class EventDetailActivity : AppCompatActivity() { 14 | companion object { 15 | private val EVENT_ID = "EVENT_ID" 16 | private val TRACK_ID = "TRACK_ID" 17 | 18 | fun callMe(activity: Activity, id: Long, category: String?) { 19 | val intent = createIntent(activity, category, id) 20 | activity.startActivity(intent) 21 | } 22 | 23 | fun createIntent(context: Context?, id: Long): Intent { 24 | val intent = Intent(context, EventDetailActivity::class.java) 25 | intent.putExtra(EVENT_ID, id) 26 | return intent 27 | } 28 | 29 | fun createIntent(context: Context?, category: String?, id: Long): Intent { 30 | val intent = Intent(context, EventDetailActivity::class.java) 31 | intent.putExtra(EVENT_ID, id) 32 | intent.putExtra(TRACK_ID, category) 33 | return intent 34 | } 35 | } 36 | 37 | override fun onCreate(savedInstanceState: Bundle?) { 38 | super.onCreate(savedInstanceState) 39 | setContentView(R.layout.activity_event_detail) 40 | } 41 | 42 | override fun onOptionsItemSelected(item: MenuItem): Boolean { 43 | if (item.itemId == android.R.id.home) { 44 | finish() 45 | return true 46 | } 47 | return super.onOptionsItemSelected(item) 48 | } 49 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/Extension.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid 2 | 3 | import android.app.Activity 4 | import android.view.View 5 | import co.touchlab.droidconandroid.shared.utils.TimeUtils 6 | import io.reactivex.Observable 7 | import io.reactivex.Single 8 | 9 | /** 10 | * Created by kgalligan on 7/21/14. 11 | */ 12 | fun Activity.findView(id: Int): View { 13 | return this.findViewById(id) 14 | } 15 | 16 | fun View.findView(id: Int): View { 17 | return this.findViewById(id) 18 | } 19 | 20 | fun Int.isOdd(): Boolean = this % 2 != 0 21 | 22 | fun Long.formatDate(format: String): String = TimeUtils.makeDateFormat(format).format(this) 23 | 24 | fun Int.calculateAlphaPercentage(totalScrollRange: Int): Float = 25 | 1 - (Math.abs(this).toFloat() / totalScrollRange) 26 | 27 | fun View.setViewVisibility(value: Boolean) { 28 | this.visibility = if (value) View.VISIBLE else View.INVISIBLE 29 | } 30 | 31 | fun T.just() = Observable.just(this) 32 | fun Array.from() = Observable.fromArray(this) 33 | fun Iterable.from() = Observable.fromIterable(this) 34 | fun (() -> T).fromCallable() = Single.fromCallable(this) -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/SquareImageView.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.View 6 | import android.widget.ImageView 7 | 8 | /* 9 | * Copyright (C) 2013 The Android Open Source Project 10 | * 11 | * Licensed under the Apache License, Version 2.0 (the "License"); 12 | * you may not use this file except in compliance with the License. 13 | * You may obtain a copy of the License at 14 | * 15 | * http://www.apache.org/licenses/LICENSE-2.0 16 | * 17 | * Unless required by applicable law or agreed to in writing, software 18 | * distributed under the License is distributed on an "AS IS" BASIS, 19 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 | * See the License for the specific language governing permissions and 21 | * limitations under the License. 22 | */ 23 | 24 | class SquareImageView : ImageView { 25 | 26 | constructor(context: Context) : super(context) { 27 | } 28 | 29 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { 30 | } 31 | 32 | constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) { 33 | } 34 | 35 | protected override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { 36 | val widthMode = View.MeasureSpec.getMode(widthMeasureSpec) 37 | val heightMode = View.MeasureSpec.getMode(heightMeasureSpec) 38 | if (widthMode == View.MeasureSpec.EXACTLY && heightMode != View.MeasureSpec.EXACTLY) { 39 | val width = View.MeasureSpec.getSize(widthMeasureSpec) 40 | var height = width 41 | if (heightMode == View.MeasureSpec.AT_MOST) { 42 | height = Math.min(height, View.MeasureSpec.getSize(heightMeasureSpec)) 43 | } 44 | setMeasuredDimension(width, height) 45 | } else { 46 | super.onMeasure(widthMeasureSpec, heightMeasureSpec) 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/UserDetailActivity.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.v7.app.AppCompatActivity 7 | import android.view.MenuItem 8 | import co.touchlab.droidconandroid.ScheduleActivity.Companion.callMe 9 | 10 | /** 11 | * Created by kgalligan on 7/27/14. 12 | */ 13 | class UserDetailActivity : AppCompatActivity(), UserDetailFragment.Companion.FinishListener { 14 | companion object { 15 | @JvmField 16 | val USER_ID = "USER_ID" 17 | 18 | fun callMe(activity: Activity, userId: Long) { 19 | val intent = Intent(activity, UserDetailActivity::class.java) 20 | intent.putExtra(USER_ID, userId) 21 | activity.startActivity(intent) 22 | } 23 | } 24 | 25 | override fun onCreate(savedInstanceState: Bundle?) { 26 | super.onCreate(savedInstanceState) 27 | setContentView(R.layout.activity_user_detail) 28 | } 29 | 30 | override fun onFragmentFinished() { 31 | if (isTaskRoot) { 32 | callMe(this) 33 | } 34 | finish() 35 | } 36 | 37 | override fun onResume() { 38 | super.onResume() 39 | } 40 | 41 | override fun onNewIntent(intent: Intent) { 42 | setIntent(intent) 43 | } 44 | 45 | override fun onBackPressed() { 46 | onFragmentFinished() 47 | } 48 | 49 | override fun onOptionsItemSelected(item: MenuItem): Boolean { 50 | if (item.itemId == android.R.id.home) 51 | onFragmentFinished() 52 | 53 | return super.onOptionsItemSelected(item) 54 | } 55 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/ui/SabotaToolbarTitle.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.ui 2 | 3 | import android.content.Context 4 | import android.graphics.Typeface 5 | import android.util.AttributeSet 6 | import android.widget.TextView 7 | 8 | /** 9 | * Created by Ramona Harrison 10 | * on 7/1/16. 11 | */ 12 | class SabotaToolbarTitle : TextView { 13 | constructor(context: Context?) : super(context) { 14 | init(context) 15 | } 16 | 17 | constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { 18 | init(context) 19 | } 20 | 21 | constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { 22 | init(context) 23 | } 24 | 25 | fun init(context: Context?) { 26 | val sabota: Typeface = Typeface.createFromAsset(context!!.assets, "font/Sabota.otf") 27 | typeface = sabota 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/ui/ScheduleFragmentPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.ui 2 | 3 | import android.support.v4.app.FragmentManager 4 | import android.support.v4.app.FragmentPagerAdapter 5 | import co.touchlab.droidconandroid.ScheduleDataFragment 6 | import co.touchlab.droidconandroid.formatDate 7 | 8 | class ScheduleFragmentPagerAdapter(private var fm: FragmentManager, private var dates: List, private var allEvents: Boolean) : FragmentPagerAdapter(fm) { 9 | 10 | override fun getCount(): Int { 11 | return dates.size 12 | } 13 | 14 | override fun getItem(position: Int): ScheduleDataFragment { 15 | return ScheduleDataFragment.newInstance(allEvents, dates[position], position) 16 | } 17 | 18 | override fun getPageTitle(position: Int): CharSequence? { 19 | return dates[position].formatDate(TIME_FORMAT) 20 | } 21 | 22 | fun switchToAgenda() { 23 | for (fragment in fm.fragments) { 24 | (fragment as? ScheduleDataFragment)?.switchToAgenda() 25 | } 26 | } 27 | 28 | fun switchToConference() { 29 | for (fragment in fm.fragments) { 30 | (fragment as? ScheduleDataFragment)?.switchToConference() 31 | } 32 | } 33 | 34 | companion object { 35 | private val TIME_FORMAT = "MMM dd" 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/ui/SponsorFragmentPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.ui 2 | 3 | import android.content.Context 4 | import android.support.v4.app.FragmentManager 5 | import android.support.v4.app.FragmentStatePagerAdapter 6 | import co.touchlab.droidconandroid.R 7 | import co.touchlab.droidconandroid.SponsorsListFragment 8 | import co.touchlab.droidconandroid.shared.interactors.SponsorsInteractor 9 | 10 | /** 11 | * Created by sufeizhao on 7/11/17. 12 | */ 13 | class SponsorFragmentPagerAdapter(private val context: Context, fm: FragmentManager) : FragmentStatePagerAdapter(fm) { 14 | 15 | override fun getCount(): Int { 16 | return SPONSOR_COUNT 17 | } 18 | 19 | override fun getItem(position: Int): SponsorsListFragment { 20 | return SponsorsListFragment.newInstance(position) 21 | } 22 | 23 | override fun getPageTitle(position: Int): CharSequence { 24 | return when (position) { 25 | // Emoji not supported in xml for anything below Android 6.0 26 | SponsorsInteractor.SPONSOR_GENERAL -> context.getString(R.string.sponsors_tab_general) + String(Character.toChars(UNICODE_COOL_EMOJI)) 27 | SponsorsInteractor.SPONSOR_PARTY -> context.getString(R.string.sponsors_tab_party) + String(Character.toChars(UNICODE_PARTY_EMOJI)) 28 | else -> super.getPageTitle(position) 29 | } 30 | } 31 | 32 | companion object { 33 | private val SPONSOR_COUNT = 2 34 | private val UNICODE_COOL_EMOJI = 0x1F60E 35 | private val UNICODE_PARTY_EMOJI = 0x1F389 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/co/touchlab/droidconandroid/ui/WelcomePagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.ui 2 | 3 | import android.support.v4.app.Fragment 4 | import android.support.v4.app.FragmentManager 5 | import android.support.v4.app.FragmentPagerAdapter 6 | import co.touchlab.droidconandroid.R 7 | import co.touchlab.droidconandroid.WelcomeFragment 8 | 9 | class WelcomePagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) { 10 | 11 | override fun getItem(position: Int): Fragment? { 12 | when (position) { 13 | 0 -> return WelcomeFragment.newInstance(R.color.welcome_background_0, R.drawable.welcome_0, R.color.white, R.string.welcome_0_title, R.string.welcome_0_desc) 14 | 1 -> return WelcomeFragment.newInstance(R.color.welcome_background_1, R.drawable.welcome_1, R.color.white, R.string.welcome_1_title, R.string.welcome_1_desc) 15 | } 16 | throw IllegalStateException("Too many fragments") 17 | } 18 | 19 | override fun getCount(): Int { 20 | return FRAGMENT_COUNT 21 | } 22 | 23 | companion object { 24 | private val FRAGMENT_COUNT = 2 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/res/anim-v21/lift.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/color/selectable_text_black.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_pink.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notification_smallicon_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-hdpi/ic_notification_smallicon_color.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/ic_notification_smallicon_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-ldpi/ic_notification_smallicon_color.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notification_smallicon_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-mdpi/ic_notification_smallicon_color.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notification_smallicon_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xhdpi/ic_notification_smallicon_color.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bannerback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/bannerback.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/dopplpng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/dopplpng.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/drawerback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/drawerback.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/droidconlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/droidconlogo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/eventback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/eventback.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notification_smallicon_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/ic_notification_smallicon_color.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tllogopadding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxhdpi/tllogopadding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notification_smallicon_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable-xxxhdpi/ic_notification_smallicon_color.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/binkylegs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/drawable/binkylegs.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_profile_placeholder.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/custom_ratingbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/div_empty_16dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_description_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launch_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_plus.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_videocam_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_sponsor_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_account_circle_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_bio_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_clock_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_company_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_email_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_event_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_facebook_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_gplus_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 15 | 19 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_info_outline_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_linkedin_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_notifications_active_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_notifications_none_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_person_add_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_phone_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_slack_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_star_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_twitter_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vic_website_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_event_detail.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 12 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_user_detail.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_welcome.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 18 | 19 | 23 | 24 | 30 | 31 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_schedule_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_sponsors_list.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_welcome.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 29 | 30 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_drawer_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_drawer_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_event_feedback.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_event_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 24 | 25 | 36 | 37 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_event_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 21 | 22 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_event_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 21 | 22 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_new_row.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_speaker_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 20 | 21 | 32 | 33 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_sponsor.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/app/src/main/res/mipmap-xxxhdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/values-land-v21/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36dp 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13dp 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 25dip 5 | 38dp 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-w600dp-land-v21/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36dp 4 | 56dp 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-w600dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13dp 4 | 56dp 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-w600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 500dp 6 | 7 | 560dp 8 | 131dp 9 | 10 | 270dp 11 | 63dp 12 | 13 | 222dp 14 | 52dp 15 | 16 | 168dp 17 | 39dp 18 | 12dp 19 | 40sp 20 | 21 | 42dp 22 | 66dp 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp-land/booleans.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 42dp 4 | 16dp 5 | @dimen/padding_xlarge 6 | @dimen/padding_xlarge 7 | @dimen/height_large 8 | 156dp 9 | 156dp 10 | @dimen/match_parent 11 | 200dp 12 | @dimen/padding_xlarge 13 | @dimen/padding_xlarge 14 | @dimen/height_large 15 | @dimen/height_large 16 | @dimen/padding_small 17 | @dimen/padding_tiny 18 | @dimen/match_parent 19 | 1dp 20 | @dimen/match_parent 21 | @dimen/wrap_content 22 | @dimen/padding_small 23 | @dimen/padding_micro 24 | @dimen/padding_tiny 25 | @dimen/padding_medium 26 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 500dp 7 | 8 | 640dp 9 | 150dp 10 | 11 | 370dp 12 | 87dp 13 | 14 | 300dp 15 | 70dp 16 | 17 | 230dp 18 | 54dp 19 | 20 | 44sp 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/values/booleans.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #AFDCF4 4 | -------------------------------------------------------------------------------- /app/src/test/java/co/touchlab/droidconandroid/shared/OneTest.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared; 2 | 3 | 4 | import co.touchlab.doppl.testing.DopplJunitTestHelper; 5 | 6 | public class OneTest 7 | { 8 | public static int runDopplResources(String resourceName) 9 | { 10 | return DopplJunitTestHelper.runResource(resourceName); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/test/java/co/touchlab/droidconandroid/shared/viewmodel/ConferenceViewModelTest.java: -------------------------------------------------------------------------------- 1 | package co.touchlab.droidconandroid.shared.viewmodel; 2 | 3 | import android.util.Pair; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | import org.junit.runner.RunWith; 8 | import org.mockito.Mock; 9 | import org.mockito.MockitoAnnotations; 10 | 11 | import co.touchlab.doppl.testing.DopplContextDelegateTestRunner; 12 | import co.touchlab.droidconandroid.shared.data.AppPrefs; 13 | import io.reactivex.Observable; 14 | 15 | 16 | import static org.mockito.Matchers.anyList; 17 | import static org.mockito.Mockito.times; 18 | import static org.mockito.Mockito.verify; 19 | import static org.mockito.Mockito.when; 20 | 21 | @RunWith(DopplContextDelegateTestRunner.class) 22 | public class ConferenceViewModelTest 23 | { 24 | @Mock 25 | AppPrefs appPrefs; 26 | 27 | @Mock 28 | ConferenceDataViewModel.Host host; 29 | 30 | ConferenceDataViewModel conferenceDataViewModel; 31 | ConferenceDataViewModel.Factory factory; 32 | 33 | @Before 34 | public void setUpMockito() 35 | { 36 | MockitoAnnotations.initMocks(this); 37 | factory = new ConferenceDataViewModel.Factory(true); 38 | factory.appPrefs = appPrefs; 39 | conferenceDataViewModel = factory.create(ConferenceDataViewModel.class); 40 | } 41 | 42 | @Test 43 | public void whenDateReverts_ShouldUpdateHost() 44 | { 45 | Pair pair1 = new Pair<>("09/29/2016 08:00AM", "09/30/2016 06:00PM"); 46 | Pair pair2 = new Pair<>("09/30/2016 08:00AM", "09/30/2016 06:00PM"); 47 | Pair pair3 = new Pair<>("09/29/2016 08:00AM", "09/30/2016 06:00PM"); 48 | 49 | Observable> obs = Observable.just(pair1, pair2, pair3).distinctUntilChanged(); 50 | when(appPrefs.observeConventionDates()).thenReturn(obs); 51 | 52 | conferenceDataViewModel.wire(host); 53 | 54 | verify(host, times(3)).updateConferenceDates(anyList()); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | def doppl_gradle_version = doppl_gradle 4 | repositories { 5 | // maven { url j2objcMavenDeploy } 6 | maven { url 'https://dl.bintray.com/doppllib/j2objc' } 7 | maven { url 'https://maven.google.com' } 8 | jcenter() 9 | google() 10 | 11 | } 12 | dependencies { 13 | classpath 'com.android.tools.build:gradle:3.1.1' 14 | classpath "org.j2objcgradle:gradle:${doppl_gradle_version}" 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | // maven { url j2objcMavenDeploy } 21 | maven { url "http://dl.bintray.com/populov/maven" } 22 | maven { url 'https://dl.bintray.com/doppllib/j2objc' } 23 | maven { url 'https://maven.google.com' } 24 | jcenter() 25 | google() 26 | } 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } -------------------------------------------------------------------------------- /docs/findworkspace.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/docs/findworkspace.gif -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | #Sun Mar 18 13:50:47 EDT 2018 2 | doppl_arch_lifecycle_doppl=1.0.3.3 3 | doppl_arch_lifecycle_ext_doppl=1.0.0.3 4 | doppl_arch_lifecycle_ext_java=1.0.0 5 | doppl_arch_lifecycle_java=1.0.3 6 | doppl_arch_room_doppl=1.0.0.3 7 | doppl_arch_room_java=1.0.0 8 | doppl_core_doppl=0.9.0.0 9 | doppl_core_java=0.9.0 10 | doppl_dagger_doppl=2.14.1.0 11 | doppl_dagger_java=2.14.1 12 | doppl_gradle=0.12.3 13 | j2objc_runtime=2.0.6b 14 | doppl_junit_doppl=4.12.0 15 | doppl_junit_java=4.12 16 | doppl_mockito_doppl=1.9.5.1 17 | doppl_mockito_java=1.9.5 18 | doppl_retrofit2_doppl=2.3.0.12 19 | doppl_retrofit2_java=2.3.0 20 | doppl_rxandroid_doppl=2.0.1.7 21 | doppl_rxandroid_java=2.0.1 22 | doppl_rxjava2_doppl=2.1.5.4 23 | doppl_rxjava2_java=2.1.5 24 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Apr 09 20:10:40 EDT 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip 7 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | 3 | install! 'cocoapods', 4 | :deterministic_uuids => false 5 | 6 | target 'ios' do 7 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 8 | use_frameworks! 9 | 10 | # Pods for ios 11 | pod 'Firebase' 12 | pod 'Firebase/Messaging' 13 | pod 'Kingfisher', '~> 3.0' 14 | pod 'j2objclib', :path => '../app' 15 | end 16 | 17 | 18 | target 'iosTestOnly' do 19 | use_frameworks! 20 | pod 'testj2objclib', :path => '../app' 21 | end 22 | 23 | target 'iosTestOnlyTests' do 24 | use_frameworks! 25 | pod 'testj2objclib', :path => '../app' 26 | end -------------------------------------------------------------------------------- /ios/appcenter-post-clone.sh: -------------------------------------------------------------------------------- 1 | cd .. 2 | ./gradlew j2objcBuild -------------------------------------------------------------------------------- /ios/ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/ios.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/ios/AboutViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AboutViewController.swift 3 | // ios 4 | // 5 | // Created by Ramona Harrison on 7/26/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AboutViewController: UIViewController { 12 | 13 | @IBOutlet weak var navBar: UINavigationBar! 14 | @IBOutlet weak var scrollView: UIScrollView! 15 | @IBOutlet weak var contentView: UIView! 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | navBar.isTranslucent = false 20 | } 21 | 22 | override func viewDidLayoutSubviews() { 23 | scrollView.addSubview(contentView) 24 | scrollView.contentSize = contentView.frame.size 25 | } 26 | 27 | override func didReceiveMemoryWarning() { 28 | super.didReceiveMemoryWarning() 29 | // Dispose of any resources that can be recreated. 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/120-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/120-2.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore152.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore167.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore58.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore76.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore80-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore80-1.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore80.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/AppStore87.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/AppIcon.appiconset/logonoalpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/AppIcon.appiconset/logonoalpha.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "3x" 14 | } 15 | ], 16 | "info" : { 17 | "version" : 1, 18 | "author" : "xcode" 19 | } 20 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_account_circle_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_account_circle_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_account_circle_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_account_circle_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_account_circle_white.imageset/ic_account_circle_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_account_circle_white.imageset/ic_account_circle_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_account_circle_white.imageset/ic_account_circle_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_account_circle_white.imageset/ic_account_circle_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_account_circle_white.imageset/ic_account_circle_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_account_circle_white.imageset/ic_account_circle_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_add.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_add.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_add_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_add_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_add.imageset/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_add.imageset/ic_add.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_add.imageset/ic_add_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_add.imageset/ic_add_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_add.imageset/ic_add_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_add.imageset/ic_add_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_business_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_business_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_business_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_business_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_business_white.imageset/ic_business_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_business_white.imageset/ic_business_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_business_white.imageset/ic_business_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_business_white.imageset/ic_business_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_business_white.imageset/ic_business_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_business_white.imageset/ic_business_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_description.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_description.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_description_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_description_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_description.imageset/ic_description.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_description.imageset/ic_description.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_description.imageset/ic_description_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_description.imageset/ic_description_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_description.imageset/ic_description_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_description.imageset/ic_description_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_done.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_done.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_done_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_done_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_done.imageset/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_done.imageset/ic_done.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_done.imageset/ic_done_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_done.imageset/ic_done_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_done.imageset/ic_done_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_done.imageset/ic_done_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_email_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_email_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_email_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_email_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_email_white.imageset/ic_email_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_email_white.imageset/ic_email_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_email_white.imageset/ic_email_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_email_white.imageset/ic_email_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_email_white.imageset/ic_email_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_email_white.imageset/ic_email_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_facebook.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "FB-f-Logo__blue_512.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_facebook.imageset/FB-f-Logo__blue_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_facebook.imageset/FB-f-Logo__blue_512.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_gplus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "btn_google+_dark_normal_ios.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "btn_google+_dark_normal_ios@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "btn_google+_dark_normal_ios@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_gplus.imageset/btn_google+_dark_normal_ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_gplus.imageset/btn_google+_dark_normal_ios.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_gplus.imageset/btn_google+_dark_normal_ios@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_gplus.imageset/btn_google+_dark_normal_ios@2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_gplus.imageset/btn_google+_dark_normal_ios@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_gplus.imageset/btn_google+_dark_normal_ios@3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_info_outline_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_info_outline_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_info_outline_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_info_outline_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_info_outline_white.imageset/ic_info_outline_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_info_outline_white.imageset/ic_info_outline_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_info_outline_white.imageset/ic_info_outline_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_info_outline_white.imageset/ic_info_outline_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_info_outline_white.imageset/ic_info_outline_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_info_outline_white.imageset/ic_info_outline_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_insert_invitation_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_insert_invitation_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_insert_invitation_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/ic_insert_invitation_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/ic_insert_invitation_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/ic_insert_invitation_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/ic_insert_invitation_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/ic_insert_invitation_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_insert_invitation_white.imageset/ic_insert_invitation_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_keyboard_arrow_right_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_keyboard_arrow_right_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_keyboard_arrow_right_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/ic_keyboard_arrow_right_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/ic_keyboard_arrow_right_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/ic_keyboard_arrow_right_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/ic_keyboard_arrow_right_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/ic_keyboard_arrow_right_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_keyboard_arrow_right_white.imageset/ic_keyboard_arrow_right_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_linked_in.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "In-2CRev-128px-TM.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_linked_in.imageset/In-2CRev-128px-TM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_linked_in.imageset/In-2CRev-128px-TM.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_phone_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_phone_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_phone_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_phone_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_phone_white.imageset/ic_phone_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_phone_white.imageset/ic_phone_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_phone_white.imageset/ic_phone_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_phone_white.imageset/ic_phone_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_phone_white.imageset/ic_phone_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_phone_white.imageset/ic_phone_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_public_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_public_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_public_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_public_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_public_white.imageset/ic_public_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_public_white.imageset/ic_public_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_public_white.imageset/ic_public_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_public_white.imageset/ic_public_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_public_white.imageset/ic_public_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_public_white.imageset/ic_public_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_query_builder_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_query_builder_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_query_builder_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_query_builder_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_query_builder_white.imageset/ic_query_builder_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_query_builder_white.imageset/ic_query_builder_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_query_builder_white.imageset/ic_query_builder_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_query_builder_white.imageset/ic_query_builder_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_query_builder_white.imageset/ic_query_builder_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_query_builder_white.imageset/ic_query_builder_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_sponsor.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_sponsor_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_sponsor_white_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_sponsor_white_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_sponsor.imageset/ic_sponsor_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_sponsor.imageset/ic_sponsor_white.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_sponsor.imageset/ic_sponsor_white_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_sponsor.imageset/ic_sponsor_white_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_sponsor.imageset/ic_sponsor_white_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_sponsor.imageset/ic_sponsor_white_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_twitter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Twitter_Social_Icon_Rounded_Square_Color.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_twitter.imageset/Twitter_Social_Icon_Rounded_Square_Color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_twitter.imageset/Twitter_Social_Icon_Rounded_Square_Color.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_videocam.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_videocam.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_videocam_2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_videocam_3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_videocam.imageset/ic_videocam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_videocam.imageset/ic_videocam.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_videocam.imageset/ic_videocam_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_videocam.imageset/ic_videocam_2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/ic_videocam.imageset/ic_videocam_3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/ic_videocam.imageset/ic_videocam_3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_beyourself.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "illo_beyourself.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "illo_beyourself-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "illo_beyourself-2.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_beyourself.imageset/illo_beyourself-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_beyourself.imageset/illo_beyourself-1.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_beyourself.imageset/illo_beyourself-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_beyourself.imageset/illo_beyourself-2.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_beyourself.imageset/illo_beyourself.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_beyourself.imageset/illo_beyourself.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_binky.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "illo_binky.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "illo_binky-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "illo_binky-2.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_binky.imageset/illo_binky-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_binky.imageset/illo_binky-1.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_binky.imageset/illo_binky-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_binky.imageset/illo_binky-2.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_binky.imageset/illo_binky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_binky.imageset/illo_binky.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_planahead.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "luluagain-0.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "luluagain-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "luluagain-2.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_planahead.imageset/luluagain-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_planahead.imageset/luluagain-0.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_planahead.imageset/luluagain-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_planahead.imageset/luluagain-1.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_planahead.imageset/luluagain-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_planahead.imageset/luluagain-2.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_signin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "illo_signin.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "illo_signin@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "illo_signin@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_signin.imageset/illo_signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_signin.imageset/illo_signin.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_signin.imageset/illo_signin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_signin.imageset/illo_signin@2x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_signin.imageset/illo_signin@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_signin.imageset/illo_signin@3x.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_welcome.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "lulu0.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "lulu-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "lulu-2.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_welcome.imageset/lulu-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_welcome.imageset/lulu-1.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_welcome.imageset/lulu-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_welcome.imageset/lulu-2.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/illo_welcome.imageset/lulu0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/illo_welcome.imageset/lulu0.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/talkheader.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "droidconsflogo-0.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "droidconsflogo-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "droidconsflog-2.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/talkheader.imageset/droidconsflog-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/talkheader.imageset/droidconsflog-2.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/talkheader.imageset/droidconsflogo-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/talkheader.imageset/droidconsflogo-0.png -------------------------------------------------------------------------------- /ios/ios/Assets.xcassets/talkheader.imageset/droidconsflogo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doppllib/DroidconDopplExample/4ca7429f1008181b158250efe0783b157f37c029/ios/ios/Assets.xcassets/talkheader.imageset/droidconsflogo-1.png -------------------------------------------------------------------------------- /ios/ios/Droicon NYC 2016.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/ios/DroidconTabBarViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DroidconTabBarViewController.swift 3 | // ios 4 | // 5 | // Created by Ramona Harrison on 7/20/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DroidconTabBarViewController: UITabBarController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Sets the background color of the selected UITabBarItem 17 | UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor(red:(0/255.0), green:(90/255.0), blue:(224/255.0), alpha: 1.0), size: 18 | CGSize(width: tabBar.frame.width/CGFloat((tabBar.items?.count)!), height: tabBar.frame.height)) 19 | 20 | // Sets the tab bar text appearance 21 | UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for:UIControlState()) 22 | UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor(red:(93/255.0), green:(253/255.0), blue:(173/255.0), alpha: 1.0)], for:.selected) 23 | 24 | // Render the icons in their original white 25 | for item in self.tabBar.items as [UITabBarItem]! { 26 | if let image = item.image { 27 | item.image = image.withRenderingMode(.alwaysOriginal) 28 | } 29 | } 30 | 31 | } 32 | 33 | override func didReceiveMemoryWarning() { 34 | super.didReceiveMemoryWarning() 35 | // Dispose of any resources that can be recreated. 36 | } 37 | } 38 | 39 | extension UIImage { 40 | func makeImageWithColorAndSize(_ color: UIColor, size: CGSize) -> UIImage { 41 | UIGraphicsBeginImageContextWithOptions(size, false, 0) 42 | color.setFill() 43 | UIRectFill(CGRect(x: 0, y: 0, width: size.width, height: size.height)) 44 | let image = UIGraphicsGetImageFromCurrentImageContext() 45 | UIGraphicsEndImageContext() 46 | return image! 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ios/ios/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // ios 4 | // 5 | // Created by Sufei Zhao on 8/23/17. 6 | // Copyright © 2017 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import doppllib 11 | 12 | extension Optional where Wrapped == String { 13 | func isNotNilOrEmpty() -> jboolean { 14 | return (self != nil) && (!self!.isEmpty) 15 | } 16 | } 17 | 18 | extension String { 19 | func formatUrl() -> String { 20 | var url = "" 21 | if (!self.hasPrefix("http://") || !self.hasPrefix("https://")) { 22 | url = "http://" + self 23 | } else { 24 | url = self 25 | } 26 | return url 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ios/ios/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AD_UNIT_ID_FOR_BANNER_TEST 6 | ca-app-pub-3940256099942544/2934735716 7 | AD_UNIT_ID_FOR_INTERSTITIAL_TEST 8 | ca-app-pub-3940256099942544/4411468910 9 | CLIENT_ID 10 | 654878069390-sv9275n4eu7e73sgl2f73te16cgtnk2r.apps.googleusercontent.com 11 | REVERSED_CLIENT_ID 12 | com.googleusercontent.apps.654878069390-sv9275n4eu7e73sgl2f73te16cgtnk2r 13 | API_KEY 14 | AIzaSyCb9hkClC2Tclo03rxwnMwdEI2VOYyhQu0 15 | GCM_SENDER_ID 16 | 654878069390 17 | PLIST_VERSION 18 | 1 19 | BUNDLE_ID 20 | co.touchlab.ios.anon 21 | PROJECT_ID 22 | master-isotope-632 23 | STORAGE_BUCKET 24 | master-isotope-632.appspot.com 25 | IS_ADS_ENABLED 26 | 27 | IS_ANALYTICS_ENABLED 28 | 29 | IS_APPINVITE_ENABLED 30 | 31 | IS_GCM_ENABLED 32 | 33 | IS_SIGNIN_ENABLED 34 | 35 | GOOGLE_APP_ID 36 | 1:654878069390:ios:334dea006fdd7a13 37 | DATABASE_URL 38 | https://master-isotope-632.firebaseio.com 39 | 40 | -------------------------------------------------------------------------------- /ios/ios/JavaUtils.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JavaUtils.swift 3 | // ios 4 | // 5 | // Created by Sufei Zhao on 8/11/17. 6 | // Copyright © 2017 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import doppllib 11 | 12 | class JavaUtils { 13 | static func convertiOSObjectArrayToArray(objArray: IOSObjectArray) -> [Any] { 14 | var array = [Any]() 15 | for i in 0.. [Any] { 22 | var array = [Any]() 23 | for i in 0.. 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ios/ios/LaunchViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StartScreenViewController.swift 3 | // ios 4 | // 5 | // Created by Kevin Galligan on 4/19/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import doppllib 11 | 12 | class LaunchViewController: UIViewController{ 13 | override func viewDidAppear(_ animated: Bool) 14 | { 15 | let viewModel = DVMConferenceDataViewModel.forIosWithBoolean(true) 16 | let appScreen = viewModel.goToScreen() 17 | let segueName = appScreen.name() 18 | performSegue(withIdentifier: segueName!, sender: self) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ios/ios/ScheduleListCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleListCell.swift 3 | // ios 4 | // 5 | // Created by Kevin Galligan on 4/26/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @objc class ScheduleListCell: UITableViewCell { 12 | 13 | @IBOutlet var titleLabel: UILabel! 14 | @IBOutlet var speakerNamesLabel: UILabel! 15 | @IBOutlet var timeLabel: UILabel! 16 | 17 | @IBOutlet var cardBackgroundToTopConstraint: NSLayoutConstraint! 18 | 19 | var startOfBlock: Bool = false { 20 | didSet { 21 | cardBackgroundToTopConstraint.constant = startOfBlock ? 10 : 0 22 | } 23 | } 24 | override var isHighlighted: Bool { 25 | didSet { 26 | updateBackgroundColor() 27 | } 28 | } 29 | @IBInspectable var highlightedColor : UIColor? 30 | 31 | 32 | func updateBackgroundColor() { 33 | titleLabel.superview!.backgroundColor = isHighlighted ? highlightedColor : UIColor.white 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ios/ios/SpeakerTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SpeakerTableViewCell.swift 3 | // ios 4 | // 5 | // Created by Sahil Ishar on 3/15/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Kingfisher 11 | import doppllib 12 | 13 | class SpeakerTableViewCell: UITableViewCell { 14 | 15 | @IBOutlet weak var nameLabel : UILabel! 16 | @IBOutlet weak var infoLabel : UILabel! 17 | @IBOutlet weak var speakerImage: UIImageView! 18 | @IBOutlet weak var speakerImageLabel: UILabel! 19 | 20 | func loadInfo(_ name: String, info: String, imgUrl: String) { 21 | nameLabel.text = name 22 | infoLabel.text = info//formatHTMLString(info) 23 | 24 | if (!imgUrl.isEmpty) { 25 | speakerImage.kf.setImage(with: URL(string: imgUrl)!) 26 | speakerImage.layer.cornerRadius = 24 27 | speakerImage.layer.masksToBounds = true 28 | } else { 29 | speakerImageLabel.text = DUTEmojiUtil.getEmojiForUser(with: name) 30 | } 31 | 32 | nameLabel.sizeToFit() 33 | infoLabel.sizeToFit() 34 | speakerImage.sizeToFit() 35 | speakerImageLabel.sizeToFit() 36 | } 37 | 38 | override func setSelected(_ selected: Bool, animated: Bool) { 39 | super.setSelected(selected, animated: animated) 40 | } 41 | 42 | func formatHTMLString(_ htmlString: String) -> NSAttributedString { 43 | let modifiedFont = NSString(format:"%@", htmlString) as String 44 | 45 | let attrStr = try! NSAttributedString( 46 | data: modifiedFont.data(using: String.Encoding.unicode, allowLossyConversion: true)!, 47 | options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8], 48 | documentAttributes: nil) 49 | 50 | return attrStr 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /ios/ios/SponsorPhotoCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SponsorPhotoCell.swift 3 | // ios 4 | // 5 | // Created by Wojciech Dziemianczyk on 8/30/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SponsorPhotoCell: UICollectionViewCell { 12 | @IBOutlet weak var imageView: UIImageView! 13 | } 14 | -------------------------------------------------------------------------------- /ios/ios/TimeUtils.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TimeUtils.swift 3 | // ios 4 | // 5 | // Created by Sufei Zhao on 8/17/17. 6 | // Copyright © 2017 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class TimeUtils { 12 | static func getEventTime(startTime: NSString, andEnd endTime: NSString) -> String { 13 | var startLoc = 7 14 | var endLoc = 7 15 | var startLocCutoff = 0 16 | 17 | let startFirstDigit = (startTime as NSString).substring(with: NSMakeRange((startTime as NSString).length - 7, 1)) 18 | let endFirstDigit = (endTime as NSString).substring(with: NSMakeRange((endTime as NSString).length - 7, 1)) 19 | 20 | if startFirstDigit == "0" { 21 | startLoc = 6 22 | } 23 | if endFirstDigit == "0" { 24 | endLoc = 6 25 | } 26 | 27 | let startAmPm = startTime.substring(with: NSMakeRange(startTime.length - 2, 2)) 28 | let endAmPm = endTime.substring(with: NSMakeRange(endTime.length - 2, 2)) 29 | if startAmPm == endAmPm { 30 | startLocCutoff = 2 31 | } 32 | 33 | let startTimeStr = startTime.substring(with: NSMakeRange(startTime.length-startLoc, startLoc-startLocCutoff)) 34 | let endTimeStr = endTime.substring(with: NSMakeRange(endTime.length - endLoc, endLoc)) 35 | 36 | return "\(startTimeStr) - \(endTimeStr)" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/ios/UserTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserTableViewCell.swift 3 | // ios 4 | // 5 | // Created by Sufei Zhao on 8/22/17. 6 | // Copyright © 2017 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UserTableViewCell: UITableViewCell { 12 | 13 | @IBOutlet weak var imageIcon: UIImageView! 14 | @IBOutlet weak var infoLabel: UILabel! 15 | 16 | func loadInfo(_ speakerInfo: SpeakerInfo) { 17 | infoLabel.text = speakerInfo.info 18 | 19 | switch (speakerInfo.type) { 20 | case .company: 21 | imageIcon.image = UIImage(named:"ic_business_white") 22 | break 23 | case .website: 24 | imageIcon.image = UIImage(named:"ic_public_white") 25 | break 26 | case .facebook: 27 | imageIcon.image = UIImage(named:"ic_facebook") 28 | break 29 | case .twitter: 30 | infoLabel.text = "@\(speakerInfo.info)" 31 | imageIcon.image = UIImage(named:"ic_twitter") 32 | break 33 | case .linkedin: 34 | imageIcon.image = UIImage(named:"ic_linked_in") 35 | break 36 | case .gplus: 37 | imageIcon.image = UIImage(named:"ic_gplus") 38 | imageIcon.backgroundColor = nil 39 | break 40 | case .profile: 41 | imageIcon.image = UIImage(named:"ic_info_outline_white") 42 | break 43 | } 44 | 45 | infoLabel.sizeToFit() 46 | imageIcon.sizeToFit() 47 | } 48 | 49 | 50 | override func setSelected(_ selected: Bool, animated: Bool) { 51 | super.setSelected(selected, animated: animated) 52 | } 53 | } 54 | 55 | struct SpeakerInfo { 56 | var type: InfoType 57 | var info: String 58 | } 59 | 60 | enum InfoType { 61 | case company, website, facebook, twitter, linkedin, gplus, profile 62 | } 63 | -------------------------------------------------------------------------------- /ios/ios/WelcomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WelcomeViewController.swift 3 | // ios 4 | // 5 | // Created by Kevin Galligan on 4/19/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import doppllib 11 | 12 | class WelcomeViewController: UIViewController 13 | { 14 | @IBOutlet weak var containerView: UIView! 15 | @IBOutlet weak var pageControl: UIPageControl! 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | } 20 | 21 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 22 | if let welcomePageViewController = segue.destination as? WelcomePageViewController { 23 | welcomePageViewController.welcomeDelegate = self 24 | } 25 | } 26 | } 27 | 28 | extension WelcomeViewController: WelcomePageViewControllerDelegate 29 | { 30 | func welcomePageViewController(_ welcomePageViewController: WelcomePageViewController, 31 | didUpdatePageCount count: Int) { 32 | pageControl.numberOfPages = count 33 | } 34 | 35 | func welcomePageViewController(_ welcomePageViewController: WelcomePageViewController, 36 | didUpdatePageIndex index: Int) { 37 | pageControl.currentPage = index 38 | 39 | if (pageControl.numberOfPages - 1 == pageControl.currentPage) { 40 | DVMAppManager.getInstance().getAppComponent().getPrefs().setHasSeenWelcome() 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /ios/iosTestOnly/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | } 88 | ], 89 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /ios/iosTestOnly/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ios/iosTestOnly/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/iosTestOnly/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ios/iosTestOnly/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // iosTestOnly 4 | // 5 | // Created by Kevin Galligan on 3/27/18. 6 | // Copyright © 2018 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | } 17 | 18 | override func didReceiveMemoryWarning() { 19 | super.didReceiveMemoryWarning() 20 | // Dispose of any resources that can be recreated. 21 | } 22 | 23 | 24 | } 25 | 26 | -------------------------------------------------------------------------------- /ios/iosTestOnlyTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ios/iosTestOnlyTests/iosTestOnlyTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // iosTestOnlyTests.swift 3 | // iosTestOnlyTests 4 | // 5 | // Created by Kevin Galligan on 3/27/18. 6 | // Copyright © 2018 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import iosTestOnly 11 | import testj2objclib 12 | 13 | class iosTestOnlyTests: XCTestCase { 14 | 15 | override func setUp() { 16 | super.setUp() 17 | // Put setup code here. This method is called before the invocation of each test method in the class. 18 | } 19 | 20 | override func tearDown() { 21 | // Put teardown code here. This method is called after the invocation of each test method in the class. 22 | super.tearDown() 23 | } 24 | 25 | func testJ2objcCode() { 26 | XCTAssertEqual(CoTouchlabDopplTestingDopplJunitTestHelper.runResource(with: "j2objcTests.txt"), 0) 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ios/iosTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/iosTests/iosTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // iosTests.m 3 | // iosTests 4 | // 5 | // Created by Kevin Galligan on 2/23/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface iosTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation iosTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /ios/iosUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/iosUITests/iosUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // iosUITests.m 3 | // iosUITests 4 | // 5 | // Created by Kevin Galligan on 2/23/16. 6 | // Copyright © 2016 Kevin Galligan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface iosUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation iosUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' --------------------------------------------------------------------------------