├── .github
├── ci-gradle.properties
└── workflows
│ └── iosched.yaml
├── .gitignore
├── .idea
├── codeStyles
│ └── codeStyleConfig.xml
└── copyright
│ ├── iosched.xml
│ └── profiles_settings.xml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── androidTest-shared
├── build.gradle.kts
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── google
│ └── samples
│ └── apps
│ └── iosched
│ └── androidtest
│ └── util
│ └── LiveDataTestUtil.kt
├── ar
├── build.gradle.kts
├── consumer-proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ └── images.imgdb
│ ├── java
│ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ └── ar
│ │ └── ArActivity.kt
│ └── res
│ └── values
│ └── styles.xml
├── benchmark
├── build.gradle.kts
└── src
│ ├── androidTest
│ ├── AndroidManifest.xml
│ └── java
│ │ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ └── benchmark
│ │ ├── BootstrapConferenceDataSourceBenchmark.kt
│ │ └── LoadAgendaUseCaseBenchmark.kt
│ └── main
│ └── AndroidManifest.xml
├── build.gradle.kts
├── buildSrc
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ ├── Libs.kt
│ └── Versions.kt
├── build_android_release.sh
├── copyright.kt
├── debug.keystore
├── depconstraints
└── build.gradle.kts
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── kokoro
├── build.sh
├── continuous.cfg
├── continuous.sh
├── presubmit.cfg
└── presubmit.sh
├── macrobenchmark
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── google
│ └── samples
│ └── apps
│ └── iosched
│ └── macrobenchmark
│ ├── BaselineProfileGenerator.kt
│ ├── BenchmarkUtils.kt
│ ├── OpenDetailBenchmarks.kt
│ ├── ScheduleBenchmarks.kt
│ └── StartupBenchmarks.kt
├── mobile
├── build.gradle.kts
├── google-services.json
├── lint.xml
├── proguard-rules-benchmark.pro
├── proguard-rules.pro
├── sampledata
│ ├── codelabs.json
│ ├── day_indicator.json
│ ├── map_variants.json
│ └── tags.json
└── src
│ ├── androidTest
│ ├── AndroidManifest.xml
│ └── java
│ │ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ └── tests
│ │ ├── CustomTestRunner.kt
│ │ ├── FixedTimeRule.kt
│ │ ├── MainTestApplication.kt
│ │ ├── SetPreferencesRule.kt
│ │ ├── di
│ │ ├── HiltExt.kt
│ │ ├── TestCoroutinesModule.kt
│ │ └── TestPreferencesStorageModule.kt
│ │ ├── prefs
│ │ └── DataStorePreferenceStorageTest.kt
│ │ └── ui
│ │ ├── AgendaTest.kt
│ │ ├── CodelabTest.kt
│ │ ├── HomeTest.kt
│ │ ├── InfoTest.kt
│ │ ├── MainActivityTestRule.kt
│ │ ├── MapTest.kt
│ │ ├── ScheduleTest.kt
│ │ ├── SessionDetailTest.kt
│ │ └── SettingsTest.kt
│ ├── debugRelease
│ └── java
│ │ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ └── di
│ │ └── SignInModule.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ ├── anim
│ │ │ ├── 0.json
│ │ │ ├── 1.json
│ │ │ ├── 2.json
│ │ │ ├── 3.json
│ │ │ ├── 4.json
│ │ │ ├── 5.json
│ │ │ ├── 6.json
│ │ │ ├── 7.json
│ │ │ ├── 8.json
│ │ │ └── 9.json
│ │ └── licenses.html
│ ├── baseline-prof.txt
│ ├── java
│ │ └── com
│ │ │ └── google
│ │ │ └── samples
│ │ │ └── apps
│ │ │ └── iosched
│ │ │ ├── MainApplication.kt
│ │ │ ├── di
│ │ │ ├── AppModule.kt
│ │ │ ├── CoroutinesModule.kt
│ │ │ └── PreferencesStorageModule.kt
│ │ │ ├── ui
│ │ │ ├── DispatchInsetsNavHostFragment.kt
│ │ │ ├── LaunchViewModel.kt
│ │ │ ├── LauncherActivity.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainActivityViewModel.kt
│ │ │ ├── MainNavigation.kt
│ │ │ ├── NavigationExtensions.kt
│ │ │ ├── SectionHeader.kt
│ │ │ ├── agenda
│ │ │ │ ├── AgendaAdapter.kt
│ │ │ │ ├── AgendaFragment.kt
│ │ │ │ ├── AgendaHeaderIndexer.kt
│ │ │ │ ├── AgendaHeadersDecoration.kt
│ │ │ │ ├── AgendaItemBindingAdapter.kt
│ │ │ │ └── AgendaViewModel.kt
│ │ │ ├── ar
│ │ │ │ ├── ArCoreNotSupportedFragment.kt
│ │ │ │ └── NoNetworkConnectionFragment.kt
│ │ │ ├── codelabs
│ │ │ │ ├── CodelabsActionsHandler.kt
│ │ │ │ ├── CodelabsAdapter.kt
│ │ │ │ ├── CodelabsFragment.kt
│ │ │ │ └── CodelabsViewModel.kt
│ │ │ ├── feed
│ │ │ │ ├── AnnouncementsFragment.kt
│ │ │ │ ├── AnnouncementsViewModel.kt
│ │ │ │ ├── FeedAdapter.kt
│ │ │ │ ├── FeedAnnouncementViewBinders.kt
│ │ │ │ ├── FeedFragment.kt
│ │ │ │ ├── FeedHeaderViewBinders.kt
│ │ │ │ ├── FeedSectionHeaderViewBinder.kt
│ │ │ │ ├── FeedSessionsViewBinder.kt
│ │ │ │ ├── FeedSocialChannelsSectionViewBinder.kt
│ │ │ │ ├── FeedSustainabilitySectionViewBinder.kt
│ │ │ │ └── FeedViewModel.kt
│ │ │ ├── filters
│ │ │ │ ├── CloseableFilterChipAdapter.kt
│ │ │ │ ├── FilterChip.kt
│ │ │ │ ├── FiltersFragment.kt
│ │ │ │ ├── FiltersViewBindingAdapters.kt
│ │ │ │ ├── FiltersViewModel.kt
│ │ │ │ ├── FiltersViewModelDelegateModule.kt
│ │ │ │ └── SelectableFilterChipAdapter.kt
│ │ │ ├── info
│ │ │ │ ├── EventFragment.kt
│ │ │ │ ├── EventInfoViewModel.kt
│ │ │ │ ├── FaqFragment.kt
│ │ │ │ ├── InfoFragment.kt
│ │ │ │ └── TravelFragment.kt
│ │ │ ├── map
│ │ │ │ ├── LoadGeoJsonFeaturesUseCase.kt
│ │ │ │ ├── MapFragment.kt
│ │ │ │ ├── MapTileProvider.kt
│ │ │ │ ├── MapUtils.kt
│ │ │ │ ├── MapVariant.kt
│ │ │ │ ├── MapVariantAdapter.kt
│ │ │ │ ├── MapVariantSelectionDialogFragment.kt
│ │ │ │ ├── MapViewBindingAdapters.kt
│ │ │ │ └── MapViewModel.kt
│ │ │ ├── messages
│ │ │ │ ├── SnackbarMessage.kt
│ │ │ │ ├── SnackbarMessageFragmentExtensions.kt
│ │ │ │ └── SnackbarMessageManager.kt
│ │ │ ├── onboarding
│ │ │ │ ├── OnboardingActivity.kt
│ │ │ │ ├── OnboardingFragment.kt
│ │ │ │ ├── OnboardingSignInFragment.kt
│ │ │ │ ├── OnboardingViewModel.kt
│ │ │ │ ├── ViewPagerPager.kt
│ │ │ │ ├── WelcomeDuringConferenceFragment.kt
│ │ │ │ ├── WelcomePostConferenceFragment.kt
│ │ │ │ └── WelcomePreConferenceFragment.kt
│ │ │ ├── reservation
│ │ │ │ ├── RemoveReservationDialogFragment.kt
│ │ │ │ ├── RemoveReservationViewModel.kt
│ │ │ │ ├── ReservationTextView.kt
│ │ │ │ ├── ReservationViewState.kt
│ │ │ │ ├── ReserveButton.kt
│ │ │ │ ├── StarReserveFab.kt
│ │ │ │ └── SwapReservationDialogFragment.kt
│ │ │ ├── schedule
│ │ │ │ ├── DayIndicator.kt
│ │ │ │ ├── DayIndicatorAdapter.kt
│ │ │ │ ├── DaySeparatorItemDecoration.kt
│ │ │ │ ├── ScheduleFragment.kt
│ │ │ │ ├── ScheduleItemBindingAdapter.kt
│ │ │ │ ├── ScheduleNavigationAction.kt
│ │ │ │ ├── ScheduleTimeHeadersDecoration.kt
│ │ │ │ ├── ScheduleTwoPaneFragment.kt
│ │ │ │ ├── ScheduleTwoPaneViewModel.kt
│ │ │ │ ├── ScheduleUiHintsDialogFragment.kt
│ │ │ │ ├── ScheduleViewModel.kt
│ │ │ │ └── SessionHeaderIndexer.kt
│ │ │ ├── search
│ │ │ │ ├── SearchFilterFragment.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ └── SearchViewModel.kt
│ │ │ ├── sessioncommon
│ │ │ │ ├── EventActions.kt
│ │ │ │ ├── OnSessionStarClickDelegate.kt
│ │ │ │ ├── OnSessionStarClickDelegateModule.kt
│ │ │ │ ├── SessionCommonExtensions.kt
│ │ │ │ ├── SessionViewPoolModule.kt
│ │ │ │ ├── SessionsAdapter.kt
│ │ │ │ ├── TagAdapter.kt
│ │ │ │ └── TagBindingAdapters.kt
│ │ │ ├── sessiondetail
│ │ │ │ ├── SessionDetailAdapter.kt
│ │ │ │ ├── SessionDetailDataBindingAdapters.kt
│ │ │ │ ├── SessionDetailFragment.kt
│ │ │ │ ├── SessionDetailNavigationAction.kt
│ │ │ │ ├── SessionDetailViewModel.kt
│ │ │ │ ├── SessionFeedbackFragment.kt
│ │ │ │ └── SessionFeedbackViewModel.kt
│ │ │ ├── settings
│ │ │ │ ├── SettingsFragment.kt
│ │ │ │ ├── SettingsViewModel.kt
│ │ │ │ └── ThemeSettingDialogFragment.kt
│ │ │ ├── signin
│ │ │ │ ├── NotificationsPreferenceDialogFragment.kt
│ │ │ │ ├── SignInDialogFragment.kt
│ │ │ │ ├── SignInViewExtensions.kt
│ │ │ │ ├── SignInViewModel.kt
│ │ │ │ ├── SignInViewModelDelegate.kt
│ │ │ │ ├── SignInViewModelDelegateModule.kt
│ │ │ │ └── SignOutDialogFragment.kt
│ │ │ ├── speaker
│ │ │ │ ├── SpeakerAdapter.kt
│ │ │ │ ├── SpeakerBindingAdapters.kt
│ │ │ │ ├── SpeakerFragment.kt
│ │ │ │ └── SpeakerViewModel.kt
│ │ │ └── theme
│ │ │ │ ├── ThemeViewModel.kt
│ │ │ │ ├── ThemedActivityDelegate.kt
│ │ │ │ └── ThemedActivityDelegateModule.kt
│ │ │ ├── util
│ │ │ ├── CircularOutlineProvider.kt
│ │ │ ├── CrashlyticsTree.kt
│ │ │ ├── Extensions.kt
│ │ │ ├── FirebaseAnalyticsHelper.kt
│ │ │ ├── GlideTargets.kt
│ │ │ ├── NavigationBarScrimBehavior.kt
│ │ │ ├── RecyclerViewExtensions.kt
│ │ │ ├── SharingStartedViews.kt
│ │ │ ├── StatusBarScrimBehavior.kt
│ │ │ ├── UiUtils.kt
│ │ │ ├── ViewBindingAdapters.kt
│ │ │ ├── WindowInsetsListeners.kt
│ │ │ ├── initializers
│ │ │ │ ├── AndroidThreeTenInitializer.kt
│ │ │ │ ├── StrictModeInitializer.kt
│ │ │ │ └── TimberInitializer.kt
│ │ │ ├── signin
│ │ │ │ ├── FirebaseAuthErrorCodeConverter.kt
│ │ │ │ ├── SignInHandler.kt
│ │ │ │ └── SignInResult.kt
│ │ │ └── wifi
│ │ │ │ └── WifiInstaller.kt
│ │ │ └── widget
│ │ │ ├── BottomSheetBehavior.kt
│ │ │ ├── BubbleDecoration.kt
│ │ │ ├── CollapsibleCard.kt
│ │ │ ├── CountdownView.kt
│ │ │ ├── CustomSwipeRefreshLayout.kt
│ │ │ ├── EventCardView.kt
│ │ │ ├── FadingSnackbar.kt
│ │ │ ├── HashtagIoDecoration.kt
│ │ │ ├── IoSlidingPaneLayout.kt
│ │ │ ├── JumpSmoothScroller.kt
│ │ │ ├── NavigationBarContentFrameLayout.kt
│ │ │ ├── NoTouchRecyclerView.kt
│ │ │ ├── SimpleRatingBar.kt
│ │ │ ├── SpaceDecoration.kt
│ │ │ └── transition
│ │ │ └── RotateX.kt
│ └── res
│ │ ├── animator
│ │ └── active_alpha.xml
│ │ ├── color
│ │ ├── chip_bg.xml
│ │ ├── chip_stroke.xml
│ │ ├── map_variant_icon.xml
│ │ ├── map_variant_text.xml
│ │ ├── navigation_item_background_tint.xml
│ │ └── schedule_day_indicator_text.xml
│ │ ├── drawable-anydpi-v23
│ │ ├── preview_window.xml
│ │ └── preview_window_logo.xml
│ │ ├── drawable-xxxhdpi
│ │ └── preview_window_logo.png
│ │ ├── drawable
│ │ ├── arcore_gray.xml
│ │ ├── asld_chip_icon.xml
│ │ ├── asld_reservation.xml
│ │ ├── asld_star_event.xml
│ │ ├── avd_chip_check_to_dot.xml
│ │ ├── avd_chip_dot_to_check.xml
│ │ ├── avd_pending_to_reservable.xml
│ │ ├── avd_pending_to_reserved.xml
│ │ ├── avd_pending_to_waitlisted.xml
│ │ ├── avd_reservable_to_pending.xml
│ │ ├── avd_reserved_to_pending.xml
│ │ ├── avd_star_event.xml
│ │ ├── avd_unstar_event.xml
│ │ ├── avd_waitlisted_to_pending.xml
│ │ ├── bullet_small.xml
│ │ ├── chip_check.xml
│ │ ├── chip_dot.xml
│ │ ├── divider_empty_margin_normal.xml
│ │ ├── divider_empty_margin_small.xml
│ │ ├── divider_slash.xml
│ │ ├── event_header_afterhours.xml
│ │ ├── event_header_codelabs.xml
│ │ ├── event_header_meals.xml
│ │ ├── event_header_office_hours.xml
│ │ ├── event_header_sandbox.xml
│ │ ├── event_header_sessions.xml
│ │ ├── event_narrow_afterhours.xml
│ │ ├── event_narrow_app_reviews1.xml
│ │ ├── event_narrow_app_reviews2.xml
│ │ ├── event_narrow_app_reviews3.xml
│ │ ├── event_narrow_game_reviews1.xml
│ │ ├── event_narrow_game_reviews2.xml
│ │ ├── event_narrow_game_reviews3.xml
│ │ ├── event_narrow_keynote.xml
│ │ ├── event_narrow_office_hours1.xml
│ │ ├── event_narrow_office_hours2.xml
│ │ ├── event_narrow_office_hours3.xml
│ │ ├── event_narrow_other.xml
│ │ ├── event_narrow_session1.xml
│ │ ├── event_narrow_session2.xml
│ │ ├── event_narrow_session3.xml
│ │ ├── event_narrow_session4.xml
│ │ ├── event_placeholder_keynote.xml
│ │ ├── event_placeholder_session1.xml
│ │ ├── event_placeholder_session2.xml
│ │ ├── event_placeholder_session3.xml
│ │ ├── event_placeholder_session4.xml
│ │ ├── fading_snackbar_background.xml
│ │ ├── filters_sheet_background.xml
│ │ ├── filters_sheet_header_shadow.xml
│ │ ├── generic_placeholder.xml
│ │ ├── hashtag_io19.xml
│ │ ├── ic_agenda_after_hours.xml
│ │ ├── ic_agenda_badge.xml
│ │ ├── ic_agenda_codelab.xml
│ │ ├── ic_agenda_concert.xml
│ │ ├── ic_agenda_keynote.xml
│ │ ├── ic_agenda_meal.xml
│ │ ├── ic_agenda_office_hours.xml
│ │ ├── ic_agenda_sandbox.xml
│ │ ├── ic_agenda_session.xml
│ │ ├── ic_agenda_store.xml
│ │ ├── ic_arrow_back.xml
│ │ ├── ic_arrow_right.xml
│ │ ├── ic_clear_all.xml
│ │ ├── ic_default_avatar_1.xml
│ │ ├── ic_default_avatar_2.xml
│ │ ├── ic_default_avatar_3.xml
│ │ ├── ic_default_profile_avatar.xml
│ │ ├── ic_expand_more.xml
│ │ ├── ic_feed_social_button_bg.xml
│ │ ├── ic_filter.xml
│ │ ├── ic_filter_clear.xml
│ │ ├── ic_launch.xml
│ │ ├── ic_layers.xml
│ │ ├── ic_login.xml
│ │ ├── ic_logo_assistant.xml
│ │ ├── ic_logo_components.xml
│ │ ├── ic_logo_facebook.xml
│ │ ├── ic_logo_google_developers.xml
│ │ ├── ic_logo_instagram.xml
│ │ ├── ic_logo_twitter.xml
│ │ ├── ic_logo_youtube.xml
│ │ ├── ic_logout.xml
│ │ ├── ic_map_after_dark.xml
│ │ ├── ic_map_concert.xml
│ │ ├── ic_map_daytime.xml
│ │ ├── ic_menu.xml
│ │ ├── ic_my_location.xml
│ │ ├── ic_nav_agenda.xml
│ │ ├── ic_nav_codelabs.xml
│ │ ├── ic_nav_home.xml
│ │ ├── ic_nav_info.xml
│ │ ├── ic_nav_map.xml
│ │ ├── ic_nav_schedule.xml
│ │ ├── ic_nav_settings.xml
│ │ ├── ic_nav_signpost.xml
│ │ ├── ic_play.xml
│ │ ├── ic_play_circle_outline.xml
│ │ ├── ic_question_answer.xml
│ │ ├── ic_reservable.xml
│ │ ├── ic_reservation.xml
│ │ ├── ic_reservation_disabled.xml
│ │ ├── ic_reservation_pending.xml
│ │ ├── ic_reserved.xml
│ │ ├── ic_search.xml
│ │ ├── ic_share.xml
│ │ ├── ic_sustainability_art.xml
│ │ ├── ic_tune.xml
│ │ ├── ic_waitlist_available.xml
│ │ ├── ic_waitlisted.xml
│ │ ├── io_logo_color.xml
│ │ ├── list_divider.xml
│ │ ├── map_marker_1.xml
│ │ ├── map_marker_2.xml
│ │ ├── map_marker_3.xml
│ │ ├── map_marker_4.xml
│ │ ├── map_marker_5.xml
│ │ ├── map_marker_6.xml
│ │ ├── map_marker_7.xml
│ │ ├── map_marker_8.xml
│ │ ├── map_marker_a.xml
│ │ ├── map_marker_b.xml
│ │ ├── map_marker_bike.xml
│ │ ├── map_marker_c.xml
│ │ ├── map_marker_charging.xml
│ │ ├── map_marker_d.xml
│ │ ├── map_marker_drink.xml
│ │ ├── map_marker_e.xml
│ │ ├── map_marker_f.xml
│ │ ├── map_marker_food.xml
│ │ ├── map_marker_g.xml
│ │ ├── map_marker_h.xml
│ │ ├── map_marker_handicap.xml
│ │ ├── map_marker_i.xml
│ │ ├── map_marker_info.xml
│ │ ├── map_marker_label_background.xml
│ │ ├── map_marker_lounge.xml
│ │ ├── map_marker_medical.xml
│ │ ├── map_marker_mothers_room.xml
│ │ ├── map_marker_parking.xml
│ │ ├── map_marker_restroom.xml
│ │ ├── map_marker_rideshare.xml
│ │ ├── map_marker_service_dog.xml
│ │ ├── map_marker_shuttle.xml
│ │ ├── map_marker_star.xml
│ │ ├── map_marker_store.xml
│ │ ├── map_marker_water.xml
│ │ ├── navigation_item_background.xml
│ │ ├── no_items_found_204.xml
│ │ ├── onboarding_io_19.xml
│ │ ├── onboarding_io_date_2019.xml
│ │ ├── onboarding_schedule.xml
│ │ ├── page_margin.xml
│ │ ├── preview_window.xml
│ │ ├── signal_wifi_off.xml
│ │ ├── tab_indicator.xml
│ │ └── unrated_thumb.xml
│ │ ├── layout-w500dp
│ │ └── event_card_content.xml
│ │ ├── layout-w720dp
│ │ └── activity_main.xml
│ │ ├── layout-w840dp
│ │ └── item_codelab.xml
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ ├── activity_onboarding.xml
│ │ ├── activity_session_detail.xml
│ │ ├── collapsible_card_content.xml
│ │ ├── countdown.xml
│ │ ├── dialog_schedule_hints.xml
│ │ ├── dialog_sign_in.xml
│ │ ├── dialog_sign_out.xml
│ │ ├── event_card_content.xml
│ │ ├── fading_snackbar_layout.xml
│ │ ├── fragment_agenda.xml
│ │ ├── fragment_announcements.xml
│ │ ├── fragment_arcore_not_supported.xml
│ │ ├── fragment_codelabs.xml
│ │ ├── fragment_feed.xml
│ │ ├── fragment_filters.xml
│ │ ├── fragment_info.xml
│ │ ├── fragment_info_event.xml
│ │ ├── fragment_info_faq.xml
│ │ ├── fragment_info_travel.xml
│ │ ├── fragment_map.xml
│ │ ├── fragment_map_variant_select.xml
│ │ ├── fragment_no_network.xml
│ │ ├── fragment_onboarding.xml
│ │ ├── fragment_onboarding_signin.xml
│ │ ├── fragment_onboarding_welcome_during.xml
│ │ ├── fragment_onboarding_welcome_post.xml
│ │ ├── fragment_onboarding_welcome_pre.xml
│ │ ├── fragment_schedule.xml
│ │ ├── fragment_schedule_two_pane.xml
│ │ ├── fragment_search.xml
│ │ ├── fragment_session_detail.xml
│ │ ├── fragment_session_feedback.xml
│ │ ├── fragment_settings.xml
│ │ ├── fragment_speaker.xml
│ │ ├── include_agenda_contents.xml
│ │ ├── info_wifi_card.xml
│ │ ├── item_agenda_dark.xml
│ │ ├── item_agenda_light.xml
│ │ ├── item_codelab.xml
│ │ ├── item_codelabs_information_card.xml
│ │ ├── item_feed_announcement.xml
│ │ ├── item_feed_announcements_empty.xml
│ │ ├── item_feed_announcements_header.xml
│ │ ├── item_feed_announcements_loading.xml
│ │ ├── item_feed_countdown.xml
│ │ ├── item_feed_moment.xml
│ │ ├── item_feed_session.xml
│ │ ├── item_feed_sessions_container.xml
│ │ ├── item_feed_social_channels.xml
│ │ ├── item_feed_sustainability.xml
│ │ ├── item_filter_chip_closeable.xml
│ │ ├── item_filter_chip_selectable.xml
│ │ ├── item_generic_section_header.xml
│ │ ├── item_inline_tag.xml
│ │ ├── item_map_variant.xml
│ │ ├── item_question.xml
│ │ ├── item_schedule_day_indicator.xml
│ │ ├── item_session.xml
│ │ ├── item_session_info.xml
│ │ ├── item_speaker.xml
│ │ ├── item_speaker_info.xml
│ │ ├── navigation_header.xml
│ │ ├── navigation_rail_header.xml
│ │ ├── search_active_filters_narrow.xml
│ │ └── search_active_filters_wide.xml
│ │ ├── menu
│ │ ├── bar_navigation.xml
│ │ ├── codelabs_menu.xml
│ │ ├── drawer_navigation.xml
│ │ ├── map_menu.xml
│ │ ├── profile.xml
│ │ ├── schedule_menu.xml
│ │ ├── search_menu.xml
│ │ └── session_detail_menu.xml
│ │ ├── navigation
│ │ ├── nav_graph.xml
│ │ ├── schedule_detail.xml
│ │ └── schedule_list.xml
│ │ ├── raw
│ │ ├── map_markers_concert.json
│ │ ├── map_markers_day.json
│ │ ├── map_markers_night.json
│ │ ├── map_style_day.json
│ │ └── map_style_night.json
│ │ ├── transition
│ │ ├── codelab_toggle.xml
│ │ ├── info_card_toggle.xml
│ │ └── speaker_shared_enter.xml
│ │ ├── values-ar-rEG
│ │ └── strings.xml
│ │ ├── values-ar-rSA
│ │ └── strings.xml
│ │ ├── values-ar
│ │ └── strings.xml
│ │ ├── values-de-rAT
│ │ └── strings.xml
│ │ ├── values-de-rCH
│ │ └── strings.xml
│ │ ├── values-de
│ │ └── strings.xml
│ │ ├── values-es-rAR
│ │ └── strings.xml
│ │ ├── values-es-rBO
│ │ └── strings.xml
│ │ ├── values-es-rCL
│ │ └── strings.xml
│ │ ├── values-es-rCO
│ │ └── strings.xml
│ │ ├── values-es-rCR
│ │ └── strings.xml
│ │ ├── values-es-rDO
│ │ └── strings.xml
│ │ ├── values-es-rEC
│ │ └── strings.xml
│ │ ├── values-es-rGT
│ │ └── strings.xml
│ │ ├── values-es-rHN
│ │ └── strings.xml
│ │ ├── values-es-rMX
│ │ └── strings.xml
│ │ ├── values-es-rNI
│ │ └── strings.xml
│ │ ├── values-es-rPA
│ │ └── strings.xml
│ │ ├── values-es-rPE
│ │ └── strings.xml
│ │ ├── values-es-rPR
│ │ └── strings.xml
│ │ ├── values-es-rPY
│ │ └── strings.xml
│ │ ├── values-es-rSV
│ │ └── strings.xml
│ │ ├── values-es-rUS
│ │ └── strings.xml
│ │ ├── values-es-rUY
│ │ └── strings.xml
│ │ ├── values-es-rVE
│ │ └── strings.xml
│ │ ├── values-fa
│ │ └── strings.xml
│ │ ├── values-fr-rCH
│ │ └── strings.xml
│ │ ├── values-fr
│ │ └── strings.xml
│ │ ├── values-gsw
│ │ └── strings.xml
│ │ ├── values-h600dp
│ │ └── dimens.xml
│ │ ├── values-it
│ │ └── strings.xml
│ │ ├── values-ja
│ │ └── strings.xml
│ │ ├── values-ko
│ │ └── strings.xml
│ │ ├── values-land
│ │ └── strings.xml
│ │ ├── values-ldrtl
│ │ └── dimens.xml
│ │ ├── values-ln
│ │ └── strings.xml
│ │ ├── values-night
│ │ └── colors.xml
│ │ ├── values-notnight-v23
│ │ ├── colors.xml
│ │ └── config.xml
│ │ ├── values-notnight-v27
│ │ ├── colors.xml
│ │ └── config.xml
│ │ ├── values-pt-rBR
│ │ └── strings.xml
│ │ ├── values-pt
│ │ └── strings.xml
│ │ ├── values-ru
│ │ └── strings.xml
│ │ ├── values-sw384dp
│ │ └── dimens.xml
│ │ ├── values-th
│ │ └── strings.xml
│ │ ├── values-v29
│ │ └── themes.xml
│ │ ├── values-vi
│ │ └── strings.xml
│ │ ├── values-w1024dp
│ │ └── dimens.xml
│ │ ├── values-w500dp
│ │ └── dimens.xml
│ │ ├── values-w600dp
│ │ └── dimens.xml
│ │ ├── values-w840dp
│ │ ├── dimens.xml
│ │ ├── donottranslate.xml
│ │ └── styles.xml
│ │ ├── values-zh-rCN
│ │ └── strings.xml
│ │ ├── values-zh-rHK
│ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ └── strings.xml
│ │ ├── values-zh
│ │ └── strings.xml
│ │ └── values
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── config.xml
│ │ ├── dimens.xml
│ │ ├── donottranslate.xml
│ │ ├── ids.xml
│ │ ├── strings.xml
│ │ ├── styles.xml
│ │ └── themes.xml
│ ├── release
│ └── google-services.json
│ ├── staging
│ ├── AndroidManifest.xml
│ └── java
│ │ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ ├── di
│ │ └── SignInModule.kt
│ │ ├── shared
│ │ └── data
│ │ │ └── login
│ │ │ ├── StagingSignInHandler.kt
│ │ │ └── datasources
│ │ │ └── StagingUserDataSources.kt
│ │ └── test
│ │ └── HiltTestActivity.kt
│ └── test
│ └── java
│ └── com
│ └── google
│ └── samples
│ └── apps
│ └── iosched
│ ├── model
│ └── MobileTestData.kt
│ ├── test
│ └── util
│ │ ├── fakes
│ │ ├── FakeAnalyticsHelper.kt
│ │ ├── FakeAppDatabase.kt
│ │ ├── FakeConferenceDataSource.kt
│ │ ├── FakeOnSessionStarClickDelegate.kt
│ │ ├── FakePreferenceStorage.kt
│ │ ├── FakeSignInViewModelDelegate.kt
│ │ ├── FakeStarEventUseCase.kt
│ │ └── FakeThemedActivityDelegate.kt
│ │ └── time
│ │ └── FixedTimeProvider.kt
│ ├── ui
│ ├── LaunchViewModelTest.kt
│ ├── MainActivityViewModelTest.kt
│ ├── agenda
│ │ ├── AgendaHeaderIndexerTest.kt
│ │ └── AgendaViewModelTest.kt
│ ├── codelabs
│ │ └── CodelabsViewModelTest.kt
│ ├── feed
│ │ ├── FeedViewModelTest.kt
│ │ ├── TestAnnouncementDataSource.kt
│ │ └── TestMomentDataSource.kt
│ ├── filters
│ │ └── FiltersViewModelTest.kt
│ ├── map
│ │ ├── MapVariantTest.kt
│ │ └── MapViewModelTest.kt
│ ├── messages
│ │ └── SnackbarMessageManagerTest.kt
│ ├── onboarding
│ │ └── OnboardingViewModelTest.kt
│ ├── reservation
│ │ └── RemoveReservationViewModelTest.kt
│ ├── schedule
│ │ ├── MarkScheduleUiHintsShownUseCaseTest.kt
│ │ ├── ScheduleViewModelTest.kt
│ │ ├── SessionHeaderIndexerTest.kt
│ │ └── TestUserEventDataSource.kt
│ ├── sessioncommon
│ │ └── OnSessionStarClickDelegateTest.kt
│ ├── sessiondetail
│ │ ├── SessionDetailViewModelTest.kt
│ │ └── SessionFeedbackViewModelTest.kt
│ ├── settings
│ │ └── SettingsViewModelTest.kt
│ ├── signin
│ │ ├── FirebaseSignInViewModelDelegateTest.kt
│ │ └── SignInViewModelTest.kt
│ └── speaker
│ │ └── SpeakerViewModelTest.kt
│ └── util
│ ├── WifiConfigurationStringsTest.kt
│ └── signin
│ └── FirebaseAuthErrorCodeConverterTest.kt
├── model
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── google
│ └── samples
│ └── apps
│ └── iosched
│ └── model
│ ├── Announcement.kt
│ ├── Block.kt
│ ├── Codelab.kt
│ ├── ConferenceData.kt
│ ├── ConferenceDay.kt
│ ├── ConferenceWifiInfo.kt
│ ├── Moment.kt
│ ├── Room.kt
│ ├── Session.kt
│ ├── Speaker.kt
│ ├── Tag.kt
│ ├── Theme.kt
│ ├── User.kt
│ ├── filters
│ └── Filter.kt
│ ├── reservations
│ ├── ReservationRequest.kt
│ └── ReservationRequestResult.kt
│ ├── schedule
│ └── PinnedSessionsSchedule.kt
│ └── userdata
│ ├── UserEvent.kt
│ └── UserSession.kt
├── playstore
├── listing_ar.txt
├── listing_de.txt
├── listing_en.txt
├── listing_es-rES.txt
├── listing_fr.txt
├── listing_it.txt
├── listing_ja.txt
├── listing_ko.txt
├── listing_pt-rBR.txt
├── listing_ru-rRU.txt
├── listing_zh-rCN.txt
├── src
│ └── main
│ │ └── res
│ │ ├── values-ar-rEG
│ │ └── strings.xml
│ │ ├── values-ar-rSA
│ │ └── strings.xml
│ │ ├── values-ar
│ │ └── strings.xml
│ │ ├── values-de-rAT
│ │ └── strings.xml
│ │ ├── values-de-rCH
│ │ └── strings.xml
│ │ ├── values-de
│ │ └── strings.xml
│ │ ├── values-es-rAR
│ │ └── strings.xml
│ │ ├── values-es-rBO
│ │ └── strings.xml
│ │ ├── values-es-rCL
│ │ └── strings.xml
│ │ ├── values-es-rCO
│ │ └── strings.xml
│ │ ├── values-es-rCR
│ │ └── strings.xml
│ │ ├── values-es-rDO
│ │ └── strings.xml
│ │ ├── values-es-rEC
│ │ └── strings.xml
│ │ ├── values-es-rGT
│ │ └── strings.xml
│ │ ├── values-es-rHN
│ │ └── strings.xml
│ │ ├── values-es-rMX
│ │ └── strings.xml
│ │ ├── values-es-rNI
│ │ └── strings.xml
│ │ ├── values-es-rPA
│ │ └── strings.xml
│ │ ├── values-es-rPE
│ │ └── strings.xml
│ │ ├── values-es-rPR
│ │ └── strings.xml
│ │ ├── values-es-rPY
│ │ └── strings.xml
│ │ ├── values-es-rSV
│ │ └── strings.xml
│ │ ├── values-es-rUS
│ │ └── strings.xml
│ │ ├── values-es-rUY
│ │ └── strings.xml
│ │ ├── values-es-rVE
│ │ └── strings.xml
│ │ ├── values-fa
│ │ └── strings.xml
│ │ ├── values-fr-rCH
│ │ └── strings.xml
│ │ ├── values-fr
│ │ └── strings.xml
│ │ ├── values-gsw
│ │ └── strings.xml
│ │ ├── values-it
│ │ └── strings.xml
│ │ ├── values-ja
│ │ └── strings.xml
│ │ ├── values-ko
│ │ └── strings.xml
│ │ ├── values-ln
│ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ └── strings.xml
│ │ ├── values-pt
│ │ └── strings.xml
│ │ ├── values-ru
│ │ └── strings.xml
│ │ ├── values-th
│ │ └── strings.xml
│ │ ├── values-vi
│ │ └── strings.xml
│ │ ├── values-zh-rCN
│ │ └── strings.xml
│ │ ├── values-zh-rHK
│ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ └── strings.xml
│ │ ├── values-zh
│ │ └── strings.xml
│ │ └── values
│ │ └── strings.xml
└── storelisting_zh-TW.txt
├── schedule.png
├── settings.gradle.kts
├── shared
├── build.gradle.kts
├── consumer-proguard-rules.pro
├── google-services.json
└── src
│ ├── debugRelease
│ └── java
│ │ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ └── shared
│ │ └── di
│ │ └── SharedModule.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── google
│ │ │ └── samples
│ │ │ └── apps
│ │ │ └── iosched
│ │ │ └── shared
│ │ │ ├── analytics
│ │ │ └── AnalyticsHelper.kt
│ │ │ ├── data
│ │ │ ├── BootstrapConferenceDataSource.kt
│ │ │ ├── ConferenceDataDownloader.kt
│ │ │ ├── ConferenceDataJsonParser.kt
│ │ │ ├── ConferenceDataRepository.kt
│ │ │ ├── ConferenceDataSource.kt
│ │ │ ├── FirestoreExtensions.kt
│ │ │ ├── NetworkConferenceDataSource.kt
│ │ │ ├── agenda
│ │ │ │ ├── AgendaBlocks.kt
│ │ │ │ └── AgendaRepository.kt
│ │ │ ├── ar
│ │ │ │ └── ArDebugFlagEndpoint.kt
│ │ │ ├── codelabs
│ │ │ │ └── CodelabsRepository.kt
│ │ │ ├── config
│ │ │ │ ├── AppConfigDataSource.kt
│ │ │ │ └── RemoteAppConfigDataSource.kt
│ │ │ ├── db
│ │ │ │ ├── AppDatabase.kt
│ │ │ │ ├── CodelabFtsDao.kt
│ │ │ │ ├── CodelabFtsEntity.kt
│ │ │ │ ├── SessionFtsDao.kt
│ │ │ │ ├── SessionFtsEntity.kt
│ │ │ │ ├── SpeakerFtsDao.kt
│ │ │ │ └── SpeakerFtsEntity.kt
│ │ │ ├── feed
│ │ │ │ ├── DefaultFeedRepository.kt
│ │ │ │ ├── FirestoreAnnouncementDataSource.kt
│ │ │ │ └── FirestoreMomentDataSource.kt
│ │ │ ├── feedback
│ │ │ │ └── FeedbackEndpoint.kt
│ │ │ ├── job
│ │ │ │ └── ConferenceDataService.kt
│ │ │ ├── prefs
│ │ │ │ └── PreferenceStorage.kt
│ │ │ ├── session
│ │ │ │ ├── SessionRepository.kt
│ │ │ │ └── json
│ │ │ │ │ ├── CodelabDeserializer.kt
│ │ │ │ │ ├── CodelabTemp.kt
│ │ │ │ │ ├── ColorDeserializer.kt
│ │ │ │ │ ├── DeserializerUtils.kt
│ │ │ │ │ ├── RoomDeserializer.kt
│ │ │ │ │ ├── SessionDeserializer.kt
│ │ │ │ │ ├── SessionTemp.kt
│ │ │ │ │ ├── SpeakerDeserializer.kt
│ │ │ │ │ └── TagDeserializer.kt
│ │ │ ├── signin
│ │ │ │ ├── AuthenticatedUserInfo.kt
│ │ │ │ ├── AuthenticatedUserRegistration.kt
│ │ │ │ ├── FirebaseRegisteredUserInfo.kt
│ │ │ │ └── datasources
│ │ │ │ │ ├── AuthIdDataSource.kt
│ │ │ │ │ ├── AuthStateUserDataSource.kt
│ │ │ │ │ ├── FirebaseAuthStateUserDataSource.kt
│ │ │ │ │ ├── FirestoreRegisteredUserDataSource.kt
│ │ │ │ │ └── RegisteredUserDataSource.kt
│ │ │ ├── tag
│ │ │ │ ├── TagDataSource.kt
│ │ │ │ └── TagRepository.kt
│ │ │ └── userevent
│ │ │ │ ├── DefaultSessionAndUserEventRepository.kt
│ │ │ │ ├── FirestoreUserEventDataSource.kt
│ │ │ │ ├── FirestoreUserEventParser.kt
│ │ │ │ ├── UserEventDataSource.kt
│ │ │ │ └── UserEventsMessageGenerator.kt
│ │ │ ├── di
│ │ │ ├── CoroutinesQualifiers.kt
│ │ │ ├── FeatureFlagAnnotations.kt
│ │ │ ├── FeatureFlagsModule.kt
│ │ │ └── MainThreadHandler.kt
│ │ │ ├── domain
│ │ │ ├── CoroutineUseCase.kt
│ │ │ ├── FlowUseCase.kt
│ │ │ ├── MediatorUseCase.kt
│ │ │ ├── RefreshConferenceDataUseCase.kt
│ │ │ ├── agenda
│ │ │ │ └── LoadAgendaUseCase.kt
│ │ │ ├── ar
│ │ │ │ ├── ArConstants.kt
│ │ │ │ └── LoadArDebugFlagUseCase.kt
│ │ │ ├── auth
│ │ │ │ └── ObserveUserAuthStateUseCase.kt
│ │ │ ├── codelabs
│ │ │ │ ├── GetCodelabsInfoCardShownUseCase.kt
│ │ │ │ ├── LoadCodelabsUseCase.kt
│ │ │ │ └── SetCodelabsInfoCardShownUseCase.kt
│ │ │ ├── feed
│ │ │ │ ├── GetConferenceStateUseCase.kt
│ │ │ │ ├── LoadAnnouncementsUseCase.kt
│ │ │ │ └── LoadCurrentMomentUseCase.kt
│ │ │ ├── filters
│ │ │ │ └── UserSessionFilterMatcher.kt
│ │ │ ├── internal
│ │ │ │ └── IOSchedHandler.kt
│ │ │ ├── logistics
│ │ │ │ └── LoadWifiInfoUseCase.kt
│ │ │ ├── prefs
│ │ │ │ ├── MarkScheduleUiHintsShownUseCase.kt
│ │ │ │ ├── MyLocationOptedInUseCase.kt
│ │ │ │ ├── NotificationsPrefIsShownUseCase.kt
│ │ │ │ ├── NotificationsPrefSaveActionUseCase.kt
│ │ │ │ ├── NotificationsPrefShownActionUseCase.kt
│ │ │ │ ├── OnboardingCompleteActionUseCase.kt
│ │ │ │ ├── OnboardingCompletedUseCase.kt
│ │ │ │ ├── OptIntoMyLocationUseCase.kt
│ │ │ │ ├── ScheduleUiHintsShownUseCase.kt
│ │ │ │ └── StopSnackbarActionUseCase.kt
│ │ │ ├── search
│ │ │ │ ├── LoadSearchFiltersUseCase.kt
│ │ │ │ ├── Searchable.kt
│ │ │ │ ├── SessionSearchUseCase.kt
│ │ │ │ └── SessionTextMatchStrategy.kt
│ │ │ ├── sessions
│ │ │ │ ├── ConferenceDayIndexer.kt
│ │ │ │ ├── GetConferenceDaysUseCase.kt
│ │ │ │ ├── LoadPinnedSessionsJsonUseCase.kt
│ │ │ │ ├── LoadScheduleUserSessionsUseCase.kt
│ │ │ │ ├── LoadSessionOneShotUseCase.kt
│ │ │ │ ├── LoadSessionUseCase.kt
│ │ │ │ ├── LoadStarredAndReservedSessionsUseCase.kt
│ │ │ │ ├── LoadUserSessionOneShotUseCase.kt
│ │ │ │ ├── LoadUserSessionUseCase.kt
│ │ │ │ ├── LoadUserSessionsUseCase.kt
│ │ │ │ ├── NotificationAlarmUpdater.kt
│ │ │ │ └── ObserveConferenceDataUseCase.kt
│ │ │ ├── settings
│ │ │ │ ├── GetAnalyticsSettingUseCase.kt
│ │ │ │ ├── GetAvailableThemesUseCase.kt
│ │ │ │ ├── GetNotificationsSettingUseCase.kt
│ │ │ │ ├── GetThemeUseCase.kt
│ │ │ │ ├── GetTimeZoneUseCase.kt
│ │ │ │ ├── ObserveThemeModeUseCase.kt
│ │ │ │ ├── SetAnalyticsSettingUseCase.kt
│ │ │ │ ├── SetThemeUseCase.kt
│ │ │ │ └── SetTimeZoneUseCase.kt
│ │ │ ├── speakers
│ │ │ │ └── LoadSpeakerSessionsUseCase.kt
│ │ │ └── users
│ │ │ │ ├── FeedbackUseCase.kt
│ │ │ │ ├── ReservationActionUseCase.kt
│ │ │ │ ├── StarEventAndNotifyUseCase.kt
│ │ │ │ └── SwapActionUseCase.kt
│ │ │ ├── fcm
│ │ │ ├── FcmTokenUpdater.kt
│ │ │ ├── FcmTopicSubscriber.kt
│ │ │ ├── IoschedFirebaseMessagingService.kt
│ │ │ └── TopicSubscriber.kt
│ │ │ ├── notifications
│ │ │ ├── AlarmBroadcastReceiver.kt
│ │ │ ├── CancelNotificationBroadcastReceiver.kt
│ │ │ └── SessionAlarmManager.kt
│ │ │ ├── result
│ │ │ ├── Event.kt
│ │ │ └── Result.kt
│ │ │ ├── time
│ │ │ └── DefaultTimeProvider.kt
│ │ │ └── util
│ │ │ ├── ColorUtils.kt
│ │ │ ├── Extensions.kt
│ │ │ ├── NetworkUtils.kt
│ │ │ ├── SpeakerUtils.kt
│ │ │ └── TimeUtils.kt
│ ├── res
│ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ │ ├── ic_default_avatar.xml
│ │ │ ├── ic_event.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_livestreamed.xml
│ │ │ ├── ic_notification_io_logo.xml
│ │ │ ├── ic_star.xml
│ │ │ ├── ic_star_border.xml
│ │ │ └── tag_dot.xml
│ │ ├── font
│ │ │ ├── google_sans.xml
│ │ │ └── google_sans_medium.xml
│ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── values-ar-rEG
│ │ │ └── strings.xml
│ │ ├── values-ar-rSA
│ │ │ └── strings.xml
│ │ ├── values-ar
│ │ │ └── strings.xml
│ │ ├── values-de-rAT
│ │ │ └── strings.xml
│ │ ├── values-de-rCH
│ │ │ └── strings.xml
│ │ ├── values-de
│ │ │ └── strings.xml
│ │ ├── values-es-rAR
│ │ │ └── strings.xml
│ │ ├── values-es-rBO
│ │ │ └── strings.xml
│ │ ├── values-es-rCL
│ │ │ └── strings.xml
│ │ ├── values-es-rCO
│ │ │ └── strings.xml
│ │ ├── values-es-rCR
│ │ │ └── strings.xml
│ │ ├── values-es-rDO
│ │ │ └── strings.xml
│ │ ├── values-es-rEC
│ │ │ └── strings.xml
│ │ ├── values-es-rGT
│ │ │ └── strings.xml
│ │ ├── values-es-rHN
│ │ │ └── strings.xml
│ │ ├── values-es-rMX
│ │ │ └── strings.xml
│ │ ├── values-es-rNI
│ │ │ └── strings.xml
│ │ ├── values-es-rPA
│ │ │ └── strings.xml
│ │ ├── values-es-rPE
│ │ │ └── strings.xml
│ │ ├── values-es-rPR
│ │ │ └── strings.xml
│ │ ├── values-es-rPY
│ │ │ └── strings.xml
│ │ ├── values-es-rSV
│ │ │ └── strings.xml
│ │ ├── values-es-rUS
│ │ │ └── strings.xml
│ │ ├── values-es-rUY
│ │ │ └── strings.xml
│ │ ├── values-es-rVE
│ │ │ └── strings.xml
│ │ ├── values-fa
│ │ │ └── strings.xml
│ │ ├── values-fr-rCH
│ │ │ └── strings.xml
│ │ ├── values-fr
│ │ │ └── strings.xml
│ │ ├── values-gsw
│ │ │ └── strings.xml
│ │ ├── values-it
│ │ │ └── strings.xml
│ │ ├── values-ja
│ │ │ └── strings.xml
│ │ ├── values-ko
│ │ │ └── strings.xml
│ │ ├── values-ln
│ │ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ │ └── strings.xml
│ │ ├── values-pt
│ │ │ └── strings.xml
│ │ ├── values-ru
│ │ │ └── strings.xml
│ │ ├── values-th
│ │ │ └── strings.xml
│ │ ├── values-vi
│ │ │ └── strings.xml
│ │ ├── values-zh-rCN
│ │ │ └── strings.xml
│ │ ├── values-zh-rHK
│ │ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ │ └── strings.xml
│ │ ├── values-zh
│ │ │ └── strings.xml
│ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── font_certs.xml
│ │ │ ├── preloaded_fonts.xml
│ │ │ └── strings.xml
│ │ └── xml
│ │ │ └── remote_config_defaults.xml
│ └── resources
│ │ └── conference_data_2019.json
│ ├── release
│ └── google-services.json
│ ├── staging
│ ├── java
│ │ └── com
│ │ │ └── google
│ │ │ └── samples
│ │ │ └── apps
│ │ │ └── iosched
│ │ │ └── shared
│ │ │ ├── data
│ │ │ ├── FakeAnnouncementDataSource.kt
│ │ │ ├── FakeAppConfigDataSource.kt
│ │ │ ├── FakeConferenceDataSource.kt
│ │ │ ├── FakeFeedbackEndpoint.kt
│ │ │ ├── ar
│ │ │ │ └── FakeArDebugFlagEndpoint.kt
│ │ │ ├── feed
│ │ │ │ └── FakeMomentDataSource.kt
│ │ │ └── userevent
│ │ │ │ └── FakeUserEventDataSource.kt
│ │ │ ├── di
│ │ │ └── SharedModule.kt
│ │ │ └── fcm
│ │ │ └── StagingTopicSubscriber.kt
│ └── res
│ │ └── drawable
│ │ └── staging_user_profile.xml
│ └── test
│ ├── java
│ └── com
│ │ └── google
│ │ └── samples
│ │ └── apps
│ │ └── iosched
│ │ ├── firestore
│ │ └── entity
│ │ │ ├── ReservationRequestResultTest.kt
│ │ │ └── UserEventTest.kt
│ │ ├── shared
│ │ ├── data
│ │ │ ├── BootstrapConferenceDataSourceTest.kt
│ │ │ ├── ConferenceDataJsonParserTest.kt
│ │ │ ├── ConferenceDataRepositoryTest.kt
│ │ │ ├── signin
│ │ │ │ └── ObserveUserAuthStateUseCaseTest.kt
│ │ │ └── userevent
│ │ │ │ ├── CompareOldAndNewUserEventsTest.kt
│ │ │ │ └── DefaultSessionAndUserEventRepositoryTest.kt
│ │ ├── domain
│ │ │ ├── FlowUseCaseTest.kt
│ │ │ ├── codelabs
│ │ │ │ └── LoadCodelabsUseCaseTest.kt
│ │ │ ├── feed
│ │ │ │ ├── GetConferenceStateUseCaseTest.kt
│ │ │ │ ├── LoadAnnouncementsUseCaseTest.kt
│ │ │ │ ├── LoadCurrentMomentUseCaseTest.kt
│ │ │ │ ├── TestAnnouncementDataSource.kt
│ │ │ │ └── TestMomentDataSource.kt
│ │ │ ├── filters
│ │ │ │ └── UserSessionFilterMatcherTest.kt
│ │ │ ├── repository
│ │ │ │ └── TestUserEventDataSource.kt
│ │ │ ├── search
│ │ │ │ ├── LoadSearchFiltersUseCaseTest.kt
│ │ │ │ └── SessionTextMatchStrategyTest.kt
│ │ │ ├── sessions
│ │ │ │ ├── LoadPinnedSessionsJsonUseCaseTest.kt
│ │ │ │ ├── LoadScheduleUserSessionsUseCaseTest.kt
│ │ │ │ ├── LoadStarredAndReservedSessionsUseCaseTest.kt
│ │ │ │ └── ObserveConferenceDataUseCaseTest.kt
│ │ │ └── users
│ │ │ │ ├── FeedbackUseCaseTest.kt
│ │ │ │ ├── ReservationActionUseCaseTest.kt
│ │ │ │ └── StarEventUseCaseTest.kt
│ │ ├── model
│ │ │ ├── SessionTest.kt
│ │ │ ├── SharedTestData.kt
│ │ │ └── TagTest.kt
│ │ └── util
│ │ │ ├── ColorUtilsTest.kt
│ │ │ ├── SpeakerUtilsTest.kt
│ │ │ └── TimeUtilsTest.kt
│ │ └── test
│ │ └── util
│ │ ├── FakeAppDatabase.kt
│ │ └── FakePreferenceStorage.kt
│ └── resources
│ ├── malformed_conference_data.json
│ └── test_conference_data1.json
├── test-shared
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── google
│ └── samples
│ └── apps
│ └── iosched
│ └── test
│ └── data
│ ├── MainCoroutineRule.kt
│ └── TestData.kt
└── tools
├── iosched-codestyle.xml
├── pre-push
└── setup.sh
/.github/ci-gradle.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2020 The Android Open Source Project
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | #
16 |
17 | org.gradle.daemon=false
18 | org.gradle.parallel=true
19 | org.gradle.jvmargs=-Xmx5120m
20 | org.gradle.workers.max=2
21 |
22 | kotlin.incremental=false
23 | kotlin.compiler.execution.strategy=in-process
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # built application files
2 | *.apk
3 | *.ap_
4 |
5 | # files for the dex VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # generated files
12 | bin/
13 | gen/
14 | out/
15 | build/
16 |
17 | # Local configuration file (sdk path, etc)
18 | local.properties
19 |
20 | # Eclipse project files
21 | .classpath
22 | .project
23 |
24 | # Windows thumbnail db
25 | .DS_Store
26 |
27 | # IDEA/Android Studio project files, because
28 | # the project can be imported from settings.gradle.kts
29 | *.iml
30 | .idea/*
31 | !.idea/copyright
32 | !.idea/codeStyles/codeStyleConfig.xml
33 |
34 | # Gradle cache
35 | .gradle
36 |
37 | # Sandbox stuff
38 | _sandbox
39 |
40 | # Android Studio captures folder
41 | captures/
42 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/copyright/iosched.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/androidTest-shared/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
19 |
--------------------------------------------------------------------------------
/ar/consumer-proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Copyright 2019 Google LLC
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # Proguard configuration for the AR feature
16 |
17 | -keep class com.google.ar.web.** { *; }
18 | -dontwarn com.google.ar.web.**
19 |
--------------------------------------------------------------------------------
/ar/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ar/src/main/assets/images.imgdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/ar/src/main/assets/images.imgdb
--------------------------------------------------------------------------------
/ar/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
21 |
22 |
--------------------------------------------------------------------------------
/benchmark/src/androidTest/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
20 |
21 |
22 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/benchmark/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
19 |
--------------------------------------------------------------------------------
/buildSrc/build.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | plugins {
18 | `kotlin-dsl`
19 | }
20 |
21 | repositories {
22 | gradlePluginPortal()
23 | }
--------------------------------------------------------------------------------
/copyright.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright $YEAR Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 |
--------------------------------------------------------------------------------
/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/debug.keystore
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/kokoro/continuous.cfg:
--------------------------------------------------------------------------------
1 | # Location of the continuous bash script.
2 | build_file: "iosched/kokoro/continuous.sh"
3 |
4 | # Extra input files/directories for the build
5 | gfile_resources: "/x20/teams/iosched-android/keys"
6 |
7 | # Use Java 11 (b/181627163)
8 | # Copy a JDK 11 installation from x20
9 | gfile_resources: "/x20/projects/java-platform/linux-amd64/jdk-11-latest"
10 |
11 | env_vars {
12 | key: "GRADLE_DEBUG"
13 | value: ""
14 | }
15 |
--------------------------------------------------------------------------------
/kokoro/continuous.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | # Fail on any error.
18 | set -e
19 | # Display commands to stderr.
20 | set -x
21 |
22 | env | sort
23 | pwd
24 | find .
25 | git/iosched/kokoro/build.sh
26 |
--------------------------------------------------------------------------------
/kokoro/presubmit.cfg:
--------------------------------------------------------------------------------
1 | # Location of the continuous bash script.
2 | build_file: "iosched/kokoro/presubmit.sh"
3 |
4 | # Extra input files/directories for the build
5 | gfile_resources: "/x20/teams/iosched-android/keys"
6 |
7 | # Use Java 11 (b/181627163)
8 | # Copy a JDK 11 installation from x20
9 | gfile_resources: "/x20/projects/java-platform/linux-amd64/jdk-11-latest"
10 |
11 |
--------------------------------------------------------------------------------
/kokoro/presubmit.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | # Fail on any error.
18 | set -e
19 | # Display commands to stderr.
20 | set -x
21 |
22 | env | sort
23 | pwd
24 | find .
25 | git/iosched/kokoro/build.sh
26 |
--------------------------------------------------------------------------------
/macrobenchmark/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/macrobenchmark/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/macrobenchmark/consumer-rules.pro
--------------------------------------------------------------------------------
/macrobenchmark/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/macrobenchmark/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
20 |
21 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/mobile/proguard-rules-benchmark.pro:
--------------------------------------------------------------------------------
1 | # Copyright 2018 Google LLC
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # Obsfuscation must be disabled for the build variant that generates Baseline Profile, otherwise
16 | # wrong symbols would be generated. The generated Baseline Profile will be properly applied if generated
17 | # without obfuscation and your app is being obfuscated.
18 | -dontobfuscate
--------------------------------------------------------------------------------
/mobile/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Copyright 2018 Google LLC
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # Glide
16 | -keep public class * implements com.bumptech.glide.module.GlideModule
17 | -keep public class * extends com.bumptech.glide.module.AppGlideModule
18 | -keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
19 | **[] $VALUES;
20 | public *;
21 | }
22 | -keepattributes *Annotation*
23 | -keepattributes SourceFile,LineNumberTable
24 | -keep public class * extends java.lang.Exception
25 | -keep class com.crashlytics.** { *; }
26 | -dontwarn com.crashlytics.**
27 |
28 | # https://github.com/firebase/FirebaseUI-Android/issues/1429
29 | -keep class com.firebase.ui.auth.** { * ; }
30 |
31 | # Firebase Functions
32 | -keep class org.json.** { *; }
33 |
--------------------------------------------------------------------------------
/mobile/sampledata/day_indicator.json:
--------------------------------------------------------------------------------
1 | {
2 | "comment": "Sample day indicators for use with tools:... attributes in layouts",
3 | "indicators": [
4 | {
5 | "label": "May 7",
6 | "checked": false
7 | },
8 | {
9 | "label": "May 8",
10 | "checked": true
11 | },
12 | {
13 | "label": "May 9",
14 | "checked": false
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/mobile/sampledata/map_variants.json:
--------------------------------------------------------------------------------
1 | {
2 | "comment": "Sample map variant data for use with tools:... attributes in layouts",
3 | "variants": [
4 | {
5 | "title": "Daytime",
6 | "checked": true
7 | },
8 | {
9 | "title": "After dark",
10 | "checked": false
11 | },
12 | {
13 | "title": "Concert",
14 | "checked": false
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/MainTestApplication.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.tests
18 |
19 | import android.app.Application
20 | import com.jakewharton.threetenabp.AndroidThreeTen
21 | import timber.log.Timber
22 |
23 | /**
24 | * Used as a base application for Hilt to run instrumented tests through the [CustomTestRunner].
25 | */
26 | open class MainTestApplication : Application() {
27 |
28 | override fun onCreate() {
29 | // ThreeTenBP for times and dates, called before super to be available for objects
30 | AndroidThreeTen.init(this)
31 | Timber.plant(Timber.DebugTree())
32 | super.onCreate()
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/MainApplication.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched
18 |
19 | import android.app.Application
20 | import dagger.hilt.android.HiltAndroidApp
21 |
22 | @HiltAndroidApp
23 | class MainApplication : Application()
24 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/SectionHeader.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui
18 |
19 | import androidx.annotation.StringRes
20 |
21 | data class SectionHeader(
22 | @StringRes val titleId: Int,
23 | val useHorizontalPadding: Boolean = true
24 | )
25 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/agenda/AgendaHeaderIndexer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.agenda
18 |
19 | import com.google.samples.apps.iosched.model.Block
20 | import org.threeten.bp.ZonedDateTime
21 |
22 | /**
23 | * Find the first block of each day (rounded down to nearest day) and return pairs of
24 | * index to start time. Assumes that [agendaItems] are sorted by ascending start time.
25 | */
26 | fun indexAgendaHeaders(agendaItems: List): List> {
27 | return agendaItems
28 | .mapIndexed { index, block -> index to block.startTime }
29 | .distinctBy { it.second.dayOfMonth }
30 | }
31 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/ar/ArCoreNotSupportedFragment.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.ar
18 |
19 | import android.os.Bundle
20 | import android.view.LayoutInflater
21 | import android.view.View
22 | import android.view.ViewGroup
23 | import androidx.fragment.app.Fragment
24 | import com.google.samples.apps.iosched.R
25 |
26 | class ArCoreNotSupportedFragment : Fragment() {
27 |
28 | override fun onCreateView(
29 | inflater: LayoutInflater,
30 | container: ViewGroup?,
31 | savedInstanceState: Bundle?
32 | ): View? {
33 | return inflater.inflate(R.layout.fragment_arcore_not_supported, container, false)
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/ar/NoNetworkConnectionFragment.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.ar
18 |
19 | import android.os.Bundle
20 | import android.view.LayoutInflater
21 | import android.view.View
22 | import android.view.ViewGroup
23 | import androidx.fragment.app.Fragment
24 | import com.google.samples.apps.iosched.R
25 |
26 | class NoNetworkConnectionFragment : Fragment() {
27 |
28 | override fun onCreateView(
29 | inflater: LayoutInflater,
30 | container: ViewGroup?,
31 | savedInstanceState: Bundle?
32 | ): View? {
33 | return inflater.inflate(R.layout.fragment_no_network, container, false)
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsActionsHandler.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.codelabs
18 |
19 | import com.google.samples.apps.iosched.model.Codelab
20 |
21 | interface CodelabsActionsHandler {
22 |
23 | fun dismissCodelabsInfoCard()
24 |
25 | fun openCodelabsOnMap()
26 |
27 | fun launchCodelabsWebsite()
28 |
29 | fun startCodelab(codelab: Codelab)
30 | }
31 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/ScheduleNavigationAction.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.schedule
18 |
19 | sealed class ScheduleNavigationAction {
20 | object NavigateToSignInDialogAction : ScheduleNavigationAction()
21 | object NavigateToSignOutDialogAction : ScheduleNavigationAction()
22 | object ShowScheduleUiHints : ScheduleNavigationAction()
23 | }
24 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessioncommon/EventActions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.sessioncommon
18 |
19 | import com.google.samples.apps.iosched.model.SessionId
20 | import com.google.samples.apps.iosched.model.userdata.UserSession
21 |
22 | /**
23 | * Actions that can be performed on events.
24 | */
25 | interface OnSessionClickListener {
26 | fun openEventDetail(id: SessionId)
27 | }
28 |
29 | interface OnSessionStarClickListener {
30 | fun onStarClicked(userSession: UserSession)
31 | }
32 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/theme/ThemeViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.theme
18 |
19 | import androidx.lifecycle.ViewModel
20 | import dagger.hilt.android.lifecycle.HiltViewModel
21 | import javax.inject.Inject
22 |
23 | /**
24 | * Thin ViewModel for themed Activities that don't have another ViewModel to use with
25 | * [ThemedActivityDelegate].
26 | */
27 | @HiltViewModel
28 | class ThemeViewModel @Inject constructor(
29 | themedActivityDelegate: ThemedActivityDelegate
30 | ) : ViewModel(), ThemedActivityDelegate by themedActivityDelegate
31 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/ui/theme/ThemedActivityDelegateModule.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.theme
18 |
19 | import dagger.Binds
20 | import dagger.Module
21 | import dagger.hilt.InstallIn
22 | import dagger.hilt.components.SingletonComponent
23 | import javax.inject.Singleton
24 |
25 | @InstallIn(SingletonComponent::class)
26 | @Module
27 | @Suppress("UNUSED")
28 | abstract class ThemedActivityDelegateModule {
29 |
30 | @Singleton
31 | @Binds
32 | abstract fun provideThemedActivityDelegate(
33 | impl: ThemedActivityDelegateImpl
34 | ): ThemedActivityDelegate
35 | }
36 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/util/CircularOutlineProvider.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.util
18 |
19 | import android.graphics.Outline
20 | import android.view.View
21 | import android.view.ViewOutlineProvider
22 |
23 | object CircularOutlineProvider : ViewOutlineProvider() {
24 | override fun getOutline(view: View, outline: Outline) {
25 | outline.setOval(
26 | view.paddingLeft,
27 | view.paddingTop,
28 | view.width - view.paddingRight,
29 | view.height - view.paddingBottom
30 | )
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/util/RecyclerViewExtensions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.util
18 |
19 | import androidx.recyclerview.widget.RecyclerView
20 |
21 | fun RecyclerView.clearDecorations() {
22 | if (itemDecorationCount > 0) {
23 | for (i in itemDecorationCount - 1 downTo 0) {
24 | removeItemDecorationAt(i)
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/util/initializers/AndroidThreeTenInitializer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.util.initializers
18 |
19 | import android.content.Context
20 | import androidx.startup.Initializer
21 | import com.jakewharton.threetenabp.AndroidThreeTen
22 |
23 | class AndroidThreeTenInitializer : Initializer {
24 |
25 | override fun create(context: Context) {
26 | AndroidThreeTen.init(context)
27 | }
28 |
29 | override fun dependencies(): List>> = emptyList()
30 | }
31 |
--------------------------------------------------------------------------------
/mobile/src/main/java/com/google/samples/apps/iosched/util/signin/SignInResult.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.util.signin
18 |
19 | import com.firebase.ui.auth.FirebaseUiException
20 |
21 | sealed class SignInResult
22 | object SignInSuccess : SignInResult()
23 | data class SignInFailed(val error: FirebaseUiException?) : SignInResult()
24 |
--------------------------------------------------------------------------------
/mobile/src/main/res/animator/active_alpha.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | -
21 |
25 |
26 |
27 | -
28 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/mobile/src/main/res/color/chip_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/color/map_variant_icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/color/map_variant_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/color/navigation_item_background_tint.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/color/schedule_day_indicator_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable-anydpi-v23/preview_window.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable-xxxhdpi/preview_window_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/mobile/src/main/res/drawable-xxxhdpi/preview_window_logo.png
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/bullet_small.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/chip_check.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
22 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/chip_dot.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
22 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/divider_empty_margin_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/divider_empty_margin_small.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/divider_slash.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
25 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/event_narrow_app_reviews1.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
22 |
26 |
30 |
31 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/fading_snackbar_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/filters_sheet_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
21 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/filters_sheet_header_shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/generic_placeholder.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_after_hours.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_badge.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_codelab.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_concert.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_keynote.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_meal.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_sandbox.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_session.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_agenda_store.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_arrow_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_arrow_right.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_clear_all.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_expand_more.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_feed_social_button_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
19 |
20 | -
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_filter.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
22 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_filter_clear.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_launch.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_layers.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_login.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_logo_facebook.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
22 |
23 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_logout.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_map_after_dark.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_map_concert.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_nav_agenda.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_nav_codelabs.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_nav_home.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_nav_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_nav_map.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_nav_schedule.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_play.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_play_circle_outline.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_question_answer.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_search.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_tune.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_waitlist_available.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/ic_waitlisted.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/list_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
17 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/map_marker_i.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
22 |
25 |
28 |
31 |
32 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/map_marker_label_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/page_margin.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
19 |
20 |
21 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/preview_window.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 | -
23 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/signal_wifi_off.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/tab_indicator.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/main/res/drawable/unrated_thumb.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
19 |
20 |
23 |
24 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/activity_onboarding.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/activity_session_detail.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/fragment_session_feedback.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/item_feed_announcements_empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/item_feed_announcements_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/item_feed_countdown.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
26 |
27 |
--------------------------------------------------------------------------------
/mobile/src/main/res/layout/navigation_rail_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/menu/map_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
31 |
--------------------------------------------------------------------------------
/mobile/src/main/res/menu/schedule_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
31 |
--------------------------------------------------------------------------------
/mobile/src/main/res/menu/search_menu.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/transition/codelab_toggle.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/mobile/src/main/res/transition/info_card_toggle.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/mobile/src/main/res/transition/speaker_shared_enter.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-h600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 400dp
20 |
21 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-land/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | H,3:1
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-ldrtl/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | 100dp
21 | 0dp
22 | 8dp
23 | 0dp
24 |
25 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-notnight-v23/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | @color/system_ui_scrim_light
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-notnight-v23/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | true
20 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-notnight-v27/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | @color/system_ui_scrim_light
21 |
22 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-notnight-v27/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | true
20 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-sw384dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 320dp
20 |
21 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-v29/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
26 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-w1024dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 0.6
20 |
21 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-w500dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | @dimen/wrap_content
21 | 72dp
22 | 0dp
23 | 48dp
24 |
25 |
26 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-w600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 0.8
20 |
21 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-w840dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 0.7
20 |
21 | 1.0
22 | @dimen/spacing_normal
23 |
24 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-w840dp/donottranslate.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | StaggeredGridLayoutManager
20 |
21 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values-w840dp/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | false
20 | false
21 |
--------------------------------------------------------------------------------
/mobile/src/main/res/values/donottranslate.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | M12,8l0,0c-2.21,0 -4,1.79 -4,4c0,2.21 1.79,4 4,4c2.21,0 4,-1.79 4,-4c0,-2.21 -1.79,-4 -4,-4l0,0z
20 | M9,16.2l-4.2,-4.2c0,0 -1.4,1.4 -1.4,1.4c0,0 5.6,5.6 5.6,5.6c0,0 12,-12 12,-12c0,0 -1.4,-1.4 -1.4,-1.4l-10.6,10.6z
21 |
22 | LinearLayoutManager
23 |
24 |
--------------------------------------------------------------------------------
/mobile/src/staging/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
20 |
21 |
22 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/mobile/src/staging/java/com/google/samples/apps/iosched/test/HiltTestActivity.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.test
18 |
19 | import androidx.appcompat.app.AppCompatActivity
20 | import dagger.hilt.android.AndroidEntryPoint
21 |
22 | @AndroidEntryPoint
23 | class HiltTestActivity : AppCompatActivity()
24 |
--------------------------------------------------------------------------------
/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAnalyticsHelper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.test.util.fakes
18 |
19 | import android.app.Activity
20 | import com.google.samples.apps.iosched.shared.analytics.AnalyticsHelper
21 |
22 | class FakeAnalyticsHelper : AnalyticsHelper {
23 | override fun sendScreenView(screenName: String, activity: Activity) {}
24 |
25 | override fun logUiEvent(itemId: String, action: String) {}
26 |
27 | override fun setUserSignedIn(isSignedIn: Boolean) {}
28 |
29 | override fun setUserRegistered(isRegistered: Boolean) {}
30 | }
31 |
--------------------------------------------------------------------------------
/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeOnSessionStarClickDelegate.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.test.util.fakes
18 |
19 | import com.google.samples.apps.iosched.model.userdata.UserSession
20 | import com.google.samples.apps.iosched.ui.sessioncommon.OnSessionStarClickDelegate
21 | import kotlinx.coroutines.flow.Flow
22 |
23 | class FakeOnSessionStarClickDelegate : OnSessionStarClickDelegate {
24 |
25 | override val navigateToSignInDialogEvents: Flow
26 | get() = TODO("Not implemented")
27 |
28 | override fun onStarClicked(userSession: UserSession) = TODO("Not implemented")
29 | }
30 |
--------------------------------------------------------------------------------
/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeThemedActivityDelegate.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.test.util.fakes
18 |
19 | import com.google.samples.apps.iosched.model.Theme
20 | import com.google.samples.apps.iosched.ui.theme.ThemedActivityDelegate
21 | import kotlinx.coroutines.flow.MutableStateFlow
22 | import kotlinx.coroutines.flow.StateFlow
23 |
24 | class FakeThemedActivityDelegate(
25 | override val theme: StateFlow = MutableStateFlow(Theme.SYSTEM),
26 | override val currentTheme: Theme = Theme.SYSTEM
27 | ) : ThemedActivityDelegate
28 |
--------------------------------------------------------------------------------
/mobile/src/test/java/com/google/samples/apps/iosched/ui/feed/TestAnnouncementDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.feed
18 |
19 | import com.google.samples.apps.iosched.model.Announcement
20 | import com.google.samples.apps.iosched.shared.data.feed.AnnouncementDataSource
21 | import com.google.samples.apps.iosched.test.data.TestData
22 |
23 | /**
24 | * Generates dummy session data to be used in tests.
25 | */
26 | object TestAnnouncementDataSource : AnnouncementDataSource {
27 |
28 | override fun getAnnouncements(): List = TestData.announcements
29 | }
30 |
--------------------------------------------------------------------------------
/mobile/src/test/java/com/google/samples/apps/iosched/ui/feed/TestMomentDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.ui.feed
18 |
19 | import com.google.samples.apps.iosched.model.Moment
20 | import com.google.samples.apps.iosched.shared.data.feed.MomentDataSource
21 | import com.google.samples.apps.iosched.test.data.TestData
22 |
23 | /**
24 | * Generates dummy moments data to be used in tests.
25 | */
26 | object TestMomentDataSource : MomentDataSource {
27 |
28 | override fun getMoments(): List = TestData.moments
29 | }
30 |
--------------------------------------------------------------------------------
/model/build.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | plugins {
18 | id("java-library")
19 | kotlin("jvm")
20 | }
21 |
22 | dependencies {
23 | api(platform(project(":depconstraints")))
24 |
25 | implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
26 | // ThreeTenBP for the shared module only. Date and time API for Java.
27 | api("org.threeten:threetenbp:${Versions.THREETENBP}:no-tzdb")
28 | implementation(Libs.CORE_KTX)
29 |
30 | implementation(Libs.KOTLIN_STDLIB)
31 | }
32 |
33 | java {
34 | sourceCompatibility = JavaVersion.VERSION_1_7
35 | targetCompatibility = JavaVersion.VERSION_1_7
36 | }
37 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/ConferenceData.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model
18 |
19 | /**
20 | * Contains schedule data with the UI models.
21 | */
22 | data class ConferenceData(
23 | val sessions: List,
24 | val speakers: List,
25 | val rooms: List,
26 | val codelabs: List,
27 | val tags: List,
28 | val version: Int
29 | )
30 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/ConferenceDay.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model
18 |
19 | import org.threeten.bp.ZonedDateTime
20 |
21 | data class ConferenceDay(
22 | val start: ZonedDateTime,
23 | val end: ZonedDateTime
24 | ) {
25 | operator fun contains(session: Session) = start <= session.startTime && end >= session.endTime
26 | }
27 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/ConferenceWifiInfo.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model
18 |
19 | data class ConferenceWifiInfo(val ssid: String, val password: String)
20 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/Room.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model
18 |
19 | /**
20 | * Describes a venue associated with the conference.
21 | */
22 | data class Room(
23 | /**
24 | * Unique string identifying this room.
25 | */
26 | val id: String,
27 |
28 | /**
29 | * The name of the room.
30 | */
31 | val name: String
32 | ) {
33 | val abbreviatedName
34 | get() = name.split("|")[0]
35 | }
36 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/Theme.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model
18 |
19 | /**
20 | * Represents the available UI themes for the application
21 | */
22 | enum class Theme(val storageKey: String) {
23 | LIGHT("light"),
24 | DARK("dark"),
25 | SYSTEM("system"),
26 | BATTERY_SAVER("battery_saver")
27 | }
28 |
29 | /**
30 | * Returns the matching [Theme] for the given [storageKey] value.
31 | */
32 | fun themeFromStorageKey(storageKey: String): Theme? {
33 | return Theme.values().firstOrNull { it.storageKey == storageKey }
34 | }
35 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/filters/Filter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model.filters
18 |
19 | import com.google.samples.apps.iosched.model.ConferenceDay
20 | import com.google.samples.apps.iosched.model.Tag
21 |
22 | sealed class Filter {
23 |
24 | data class TagFilter(val tag: Tag) : Filter()
25 |
26 | data class DateFilter(val day: ConferenceDay) : Filter()
27 |
28 | object MyScheduleFilter : Filter()
29 | }
30 |
--------------------------------------------------------------------------------
/model/src/main/java/com/google/samples/apps/iosched/model/userdata/UserSession.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.model.userdata
18 |
19 | import com.google.samples.apps.iosched.model.Session
20 | import com.google.samples.apps.iosched.model.SessionType
21 |
22 | /**
23 | * Wrapper class to hold the [Session] and associating [UserEvent].
24 | */
25 | data class UserSession(
26 | val session: Session,
27 | val userEvent: UserEvent
28 | ) {
29 |
30 | fun isPostSessionNotificationRequired(): Boolean {
31 | return userEvent.isReserved() &&
32 | !userEvent.isReviewed &&
33 | session.type == SessionType.SESSION
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/playstore/listing_zh-rCN.txt:
--------------------------------------------------------------------------------
1 | Your store listing text is now localized. To make this available on Google Play store, you will need to submit this content on Google Developer Console.
2 | ******************** Short description in locale ********************
3 | 您的I/O大会导航助手,不管您是亲临现场或远程参与都能为您提供帮助。
4 | ******************** Full description in locale ********************
5 | Google I/O 2016官方应用程序旨在成为您的I/O大会导航助手,不管您是亲临现场或远程参与都能为您提供帮助。
6 | -- 探索会议日程,了解主题、话题和演讲者的详细信息
7 | -- 添加活动到个性化的日程表
8 | -- 在日程表中的活动开始之前收到提醒
9 | -- 观看主题演讲和活动现场直播
10 | -- 在您的所有设备和I/O网站之间同步您的日程表
11 | -- 使用向量式大会地图为自己指引路线
12 | -- 关注I/O相关的公共社交对话
13 | -- 在视频中查看往年的I/O内容
14 |
15 | *亲临大会现场参与者专享:*
16 | - 利用在大会前预先配置的WiFi网络
17 |
18 | 这款应用程序针对各种形状和尺寸的手机及平板电脑进行了优化。
19 | 应用程序的源代码将在I/O后不久发布。
20 |
21 | v4.0:Google I/O 2016更新
22 | ******************** Title in locale ********************
23 | Google I/O 2016
--------------------------------------------------------------------------------
/playstore/src/main/res/values-ja/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 現地での参加、リモートでの参加を問わず、I/O をナビゲートしてくれるアシスタントです。
20 |
21 | Google I/O 2018 用の更新\n• イベントの座席を事前に予約する\n• イベント、来場方法の詳細、よくある質問に関する重要な情報を見る
22 | 必要な権限
23 | オプションの権限
24 | 位置情報: ユーザーの現在地周辺の会場の地図を表示するために必要です。
25 |
26 |
--------------------------------------------------------------------------------
/playstore/src/main/res/values-ko/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 직접 참석하거나 온라인으로 참여 시 이 앱으로 I/O를 둘러볼 수 있습니다.
20 |
21 | Google I/O 2018에 맞게 업데이트되었습니다.\n• 일정보다 앞서 이벤트 좌석 예약\n• 이벤트, 이동 정보, FAQ에 대한 중요 정보 읽기
22 | 필수 권한
23 | 선택 권한
24 | 위치 정보: 사용자 위치 주변의 이벤트 장소 지도를 표시하는 데 필요합니다.
25 |
26 |
--------------------------------------------------------------------------------
/playstore/src/main/res/values-zh-rCN/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 无论您是亲临会议还是远程参加,都可以可协助您了解 I/O 大会。
20 |
21 | 更新 2018 年 Google I/O 大会相关信息\n• 提前预约活动席位\n• 了解有关活动的重要信息、交通方式详情和常见问题解答。
22 | 所需权限
23 | 可选权限
24 | 位置信息:需要获取位置信息,以便显示用户所在位置周围的场地地图。
25 |
26 |
--------------------------------------------------------------------------------
/playstore/src/main/res/values-zh-rHK/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 不論是親臨 I/O 大會現場或以遠端方式參加,這款應用程式都是你的最佳導航幫手。
20 |
21 | 更新 2018 年 Google I/O 大會相關訊息\n• 可事先預約活動席位\n• 可查看有關大會活動的重要資訊、交通方式詳細資訊和常見問題。
22 | 必要權限
23 | 選用權限
24 | 位置資訊:授予這項權限後,應用程式即可顯示使用者所在位置一帶的會場地圖。
25 |
26 |
--------------------------------------------------------------------------------
/playstore/src/main/res/values-zh-rTW/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 不論是親臨 I/O 大會現場或以遠端方式參加,這款應用程式都是你的最佳導航幫手。
20 |
21 | 更新 2018 年 Google I/O 大會相關訊息\n• 可事先預約活動席位\n• 可查看有關大會活動的重要資訊、交通方式詳細資訊和常見問題。
22 | 必要權限
23 | 選用權限
24 | 位置資訊:授予這項權限後,應用程式即可顯示使用者所在位置一帶的會場地圖。
25 |
26 |
--------------------------------------------------------------------------------
/playstore/src/main/res/values-zh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 无论您是亲临会议还是远程参加,都可以可协助您了解 I/O 大会。
20 |
21 | 更新 2018 年 Google I/O 大会相关信息\n• 提前预约活动席位\n• 了解有关活动的重要信息、交通方式详情和常见问题解答。
22 | 所需权限
23 | 可选权限
24 | 位置信息:需要获取位置信息,以便显示用户所在位置周围的场地地图。
25 |
26 |
--------------------------------------------------------------------------------
/playstore/storelisting_zh-TW.txt:
--------------------------------------------------------------------------------
1 | Your store listing text is now localized. To make this available on Google Play store, you will need to submit this content on Google Developer Console.
2 | ******************** Short description in locale ********************
3 | 您的I/O大會導航助手,不管您是親臨現場或遠端參與都能為您提供幫助。
4 | ******************** Title in locale ********************
5 | Google I/O 2016
6 | ******************** Full description in locale ********************
7 | Google I/O 2016官方應用程式旨在成為您的I/O大會導航助手,不管您是親臨現場或遠端參與都能為您提供幫助。
8 | -- 探索會議日程,瞭解主題、話題和演講者的詳細資訊
9 | -- 新增活動到個性化的日程表
10 | -- 在日程表中的活動開始之前收到提醒
11 | -- 觀看主題演講和活動現場直播
12 | -- 在您的所有裝置和I/O網站之間同步您的日程表
13 | -- 使用向量式大會地圖為自己指引路線
14 | -- 關注I/O相關的公共社交對話
15 | -- 在影片中檢視往年的I/O內容
16 |
17 | *親臨大會現場參與者專享:*
18 | - 利用在大會前預先設定的WiFi網路
19 |
20 | 這款應用程式針對各種形狀和尺寸的手機及平板電腦進行了最佳化。
21 | 應用程式的原始程式碼將在I/O後不久發佈。
22 |
23 | v4.0:Google I/O 2016更新
--------------------------------------------------------------------------------
/schedule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/schedule.png
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | include(
18 | ":mobile",
19 | ":shared",
20 | ":test-shared",
21 | ":model",
22 | ":androidTest-shared",
23 | "ar",
24 | "benchmark",
25 | "depconstraints",
26 | ":macrobenchmark"
27 | )
28 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/ConferenceDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data
18 |
19 | import com.google.samples.apps.iosched.model.ConferenceData
20 |
21 | interface ConferenceDataSource {
22 | fun getRemoteConferenceData(): ConferenceData?
23 | fun getOfflineConferenceData(): ConferenceData?
24 | }
25 |
26 | enum class UpdateSource {
27 | NONE,
28 | NETWORK,
29 | CACHE,
30 | BOOTSTRAP
31 | }
32 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/FirestoreExtensions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data
18 |
19 | import com.google.firebase.firestore.DocumentReference
20 | import com.google.firebase.firestore.FirebaseFirestore
21 |
22 | fun FirebaseFirestore.document2020(): DocumentReference =
23 | // This is a prefix for Firestore document for this year
24 | collection("google_io_events").document("2020")
25 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/codelabs/CodelabsRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.codelabs
18 |
19 | import com.google.samples.apps.iosched.model.Codelab
20 | import com.google.samples.apps.iosched.shared.data.ConferenceDataRepository
21 | import javax.inject.Inject
22 | import javax.inject.Singleton
23 |
24 | @Singleton
25 | open class CodelabsRepository @Inject constructor(
26 | private val conferenceDataRepository: ConferenceDataRepository
27 | ) {
28 | fun getCodelabs(): List = conferenceDataRepository.getOfflineConferenceData().codelabs
29 | }
30 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/db/CodelabFtsDao.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.db
18 |
19 | import androidx.room.Dao
20 | import androidx.room.Insert
21 | import androidx.room.OnConflictStrategy
22 | import androidx.room.Query
23 |
24 | /**
25 | * The Data Access Object for the [CodelabFtsEntity] class.
26 | */
27 | @Dao
28 | interface CodelabFtsDao {
29 | @Insert(onConflict = OnConflictStrategy.REPLACE)
30 | fun insertAll(codelabs: List)
31 |
32 | @Query("SELECT codelabId FROM codelabsFts WHERE codelabsFts MATCH :query")
33 | fun searchAllCodelabs(query: String): List
34 | }
35 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/db/SessionFtsDao.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.db
18 |
19 | import androidx.room.Dao
20 | import androidx.room.Insert
21 | import androidx.room.OnConflictStrategy
22 | import androidx.room.Query
23 |
24 | /**
25 | * The Data Access Object for the [SessionFtsEntity] class.
26 | */
27 | @Dao
28 | interface SessionFtsDao {
29 | @Insert(onConflict = OnConflictStrategy.REPLACE)
30 | fun insertAll(sessions: List)
31 |
32 | @Query("SELECT sessionId FROM sessionsFts WHERE sessionsFts MATCH :query")
33 | fun searchAllSessions(query: String): List
34 | }
35 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/db/SpeakerFtsDao.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.db
18 |
19 | import androidx.room.Dao
20 | import androidx.room.Insert
21 | import androidx.room.OnConflictStrategy
22 | import androidx.room.Query
23 |
24 | /**
25 | * The Data Access Object for the [SpeakerFtsEntity] class.
26 | */
27 | @Dao
28 | interface SpeakerFtsDao {
29 | @Insert(onConflict = OnConflictStrategy.REPLACE)
30 | fun insertAll(speakers: List)
31 |
32 | @Query("SELECT speakerId FROM speakersFts WHERE speakersFts MATCH :query")
33 | fun searchAllSpeakers(query: String): List
34 | }
35 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/session/json/ColorDeserializer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.session.json
18 |
19 | import android.graphics.Color
20 | import com.google.samples.apps.iosched.shared.util.ColorUtils
21 | import timber.log.Timber
22 |
23 | fun parseColor(colorString: String?): Int {
24 | return if (colorString != null) {
25 | try {
26 | ColorUtils.parseHexColor(colorString)
27 | } catch (t: Throwable) {
28 | Timber.d(t, "Failed to parse color")
29 | Color.TRANSPARENT
30 | }
31 | } else {
32 | Color.TRANSPARENT
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/session/json/DeserializerUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.session.json
18 |
19 | import com.google.gson.JsonObject
20 |
21 | internal fun getListFromJsonArray(obj: JsonObject, key: String): List {
22 | val array = obj.get(key).asJsonArray
23 | return array.map { it.asString }
24 | }
25 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/signin/datasources/AuthIdDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.signin.datasources
18 |
19 | /**
20 | * Interface to simply get the current authenticated user ID.
21 | */
22 | interface AuthIdDataSource {
23 | fun getUserId(): String?
24 | }
25 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/signin/datasources/RegisteredUserDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.signin.datasources
18 |
19 | import com.google.samples.apps.iosched.shared.result.Result
20 | import kotlinx.coroutines.flow.Flow
21 |
22 | /**
23 | * A data source that listens to changes in the user data related to event
24 | * registration.
25 | */
26 | interface RegisteredUserDataSource {
27 | /**
28 | * Returns the holder of the result of listening to the data source.
29 | */
30 | fun observeUserChanges(userId: String): Flow>
31 | }
32 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/tag/TagDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.tag
18 |
19 | import com.google.samples.apps.iosched.model.Tag
20 |
21 | interface TagDataSource {
22 | fun getTags(): List
23 | }
24 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/data/tag/TagRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.tag
18 |
19 | import com.google.samples.apps.iosched.model.Tag
20 | import com.google.samples.apps.iosched.shared.data.ConferenceDataRepository
21 | import javax.inject.Inject
22 | import javax.inject.Singleton
23 |
24 | /**
25 | * Single point of access to tag data for the presentation layer.
26 | */
27 | @Singleton
28 | open class TagRepository @Inject constructor(
29 | private val conferenceDataRepository: ConferenceDataRepository
30 | ) {
31 | fun getTags(): List = conferenceDataRepository.getOfflineConferenceData().tags
32 | }
33 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/di/CoroutinesQualifiers.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.di
18 |
19 | import javax.inject.Qualifier
20 |
21 | @Retention(AnnotationRetention.BINARY)
22 | @Qualifier
23 | annotation class DefaultDispatcher
24 |
25 | @Retention(AnnotationRetention.BINARY)
26 | @Qualifier
27 | annotation class IoDispatcher
28 |
29 | @Retention(AnnotationRetention.BINARY)
30 | @Qualifier
31 | annotation class MainDispatcher
32 |
33 | @Retention(AnnotationRetention.BINARY)
34 | @Qualifier
35 | annotation class MainImmediateDispatcher
36 |
37 | @Retention(AnnotationRetention.BINARY)
38 | @Qualifier
39 | annotation class ApplicationScope
40 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/di/MainThreadHandler.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.di
18 |
19 | import javax.inject.Qualifier
20 |
21 | @Qualifier
22 | @Target(
23 | AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER,
24 | AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.FIELD,
25 | AnnotationTarget.VALUE_PARAMETER
26 | )
27 | annotation class MainThreadHandler
28 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/ar/ArConstants.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.domain.ar
18 |
19 | object ArConstants {
20 | const val PINNED_SESSIONS_JSON_KEY = "pinned_sessions_json"
21 | const val CAN_SIGNED_IN_USER_DEMO_AR = "can_demo_ar"
22 | }
23 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/search/Searchable.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.domain.search
18 |
19 | import com.google.samples.apps.iosched.model.Codelab
20 | import com.google.samples.apps.iosched.model.Session
21 | import com.google.samples.apps.iosched.model.Speaker
22 |
23 | /**
24 | * Sealed class that represents searchable contents.
25 | */
26 | sealed class Searchable {
27 |
28 | class SearchedSession(val session: Session) : Searchable()
29 | class SearchedSpeaker(val speaker: Speaker) : Searchable()
30 | class SearchedCodelab(val codelab: Codelab) : Searchable()
31 | }
32 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/GetConferenceDaysUseCase.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.domain.sessions
18 |
19 | import com.google.samples.apps.iosched.model.ConferenceDay
20 | import com.google.samples.apps.iosched.shared.data.ConferenceDataRepository
21 | import javax.inject.Inject
22 |
23 | class GetConferenceDaysUseCase @Inject constructor(
24 | private val conferenceDataRepository: ConferenceDataRepository
25 | ) {
26 | operator fun invoke(): List {
27 | return conferenceDataRepository.getConferenceDays()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/shared/src/main/java/com/google/samples/apps/iosched/shared/util/SpeakerUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.util
18 |
19 | import com.google.samples.apps.iosched.model.Speaker
20 |
21 | object SpeakerUtils {
22 |
23 | fun alphabeticallyOrderedSpeakerList(speakerSet: Set) =
24 | ArrayList(speakerSet).sortedBy { it.name }
25 | }
26 |
--------------------------------------------------------------------------------
/shared/src/main/res/drawable/ic_event.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/shared/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
26 |
32 |
33 |
--------------------------------------------------------------------------------
/shared/src/main/res/drawable/ic_livestreamed.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/shared/src/main/res/drawable/ic_star.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/shared/src/main/res/drawable/ic_star_border.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
23 |
26 |
27 |
--------------------------------------------------------------------------------
/shared/src/main/res/drawable/tag_dot.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
19 |
20 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/shared/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/shared/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/shared/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/shared/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/shared/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/shared/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/shared/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/shared/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/shared/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/shared/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/iosched/738e1e008096fad5f36612325275e80c33dbe436/shared/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/shared/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | 8dp
20 |
21 |
--------------------------------------------------------------------------------
/shared/src/main/res/values/preloaded_fonts.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | - @font/google_sans
21 |
22 |
23 |
--------------------------------------------------------------------------------
/shared/src/staging/java/com/google/samples/apps/iosched/shared/data/FakeFeedbackEndpoint.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data
18 |
19 | import com.google.samples.apps.iosched.model.SessionId
20 | import com.google.samples.apps.iosched.shared.data.feedback.FeedbackEndpoint
21 | import com.google.samples.apps.iosched.shared.result.Result
22 |
23 | object FakeFeedbackEndpoint : FeedbackEndpoint {
24 |
25 | override suspend fun sendFeedback(
26 | sessionId: SessionId,
27 | responses: Map
28 | ): Result {
29 | return Result.Success(Unit)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/shared/src/staging/java/com/google/samples/apps/iosched/shared/data/ar/FakeArDebugFlagEndpoint.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.data.ar
18 |
19 | object FakeArDebugFlagEndpoint : ArDebugFlagEndpoint {
20 |
21 | override suspend fun canDemoAr(): Boolean {
22 | return true
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/shared/src/staging/java/com/google/samples/apps/iosched/shared/fcm/StagingTopicSubscriber.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.fcm
18 |
19 | class StagingTopicSubscriber : TopicSubscriber {
20 | override fun subscribeToScheduleUpdates() {
21 | // No-op
22 | }
23 |
24 | override fun subscribeToAttendeeUpdates() {
25 | // No-op
26 | }
27 |
28 | override fun unsubscribeFromAttendeeUpdates() {
29 | // No-op
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/TestAnnouncementDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.domain.feed
18 |
19 | import com.google.samples.apps.iosched.model.Announcement
20 | import com.google.samples.apps.iosched.shared.data.feed.AnnouncementDataSource
21 | import com.google.samples.apps.iosched.test.data.TestData
22 |
23 | object TestAnnouncementDataSource : AnnouncementDataSource {
24 |
25 | override fun getAnnouncements(): List = TestData.announcements
26 | }
27 |
--------------------------------------------------------------------------------
/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/TestMomentDataSource.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2019 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.google.samples.apps.iosched.shared.domain.feed
18 |
19 | import com.google.samples.apps.iosched.model.Moment
20 | import com.google.samples.apps.iosched.shared.data.feed.MomentDataSource
21 | import com.google.samples.apps.iosched.test.data.TestData
22 |
23 | /**
24 | * Generates dummy moments data to be used in tests.
25 | */
26 | object TestMomentDataSource : MomentDataSource {
27 |
28 | override fun getMoments(): List = TestData.moments
29 | }
30 |
--------------------------------------------------------------------------------
/shared/src/test/resources/malformed_conference_data.json:
--------------------------------------------------------------------------------
1 | // MALFORMED JSON
2 | {
3 | "object": {}
4 |
--------------------------------------------------------------------------------
/test-shared/build.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | plugins {
18 | id("java-library")
19 | kotlin("jvm")
20 | }
21 |
22 | dependencies {
23 | api(platform(project(":depconstraints")))
24 | implementation(project(":model"))
25 | // Kotlin
26 | implementation(Libs.KOTLIN_STDLIB)
27 |
28 | // Test
29 | implementation(Libs.JUNIT)
30 | api(Libs.COROUTINES_TEST)
31 |
32 | // ThreeTenBP for the shared module only. Date and time API for Java.
33 | testImplementation(Libs.THREETENBP)
34 | compileOnly("org.threeten:threetenbp:${Versions.THREETENBP}:no-tzdb")
35 | }
36 |
--------------------------------------------------------------------------------