├── .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 | [](https://appcenter.ms)
15 |
16 | ## Android
17 | [](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 | 
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'
--------------------------------------------------------------------------------