├── .circleci └── config.yml ├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── chore.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md ├── issue_label_bot.yaml ├── issue_template.md └── release-drafter.yml ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app ├── build.gradle ├── config │ ├── checkstyle.xml │ ├── findbugs.xml │ └── pmd.xml ├── jacoco.gradle ├── lombok.config ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── org │ │ └── fossasia │ │ └── openevent │ │ └── app │ │ └── ExampleInstrumentedTest.java │ ├── fdroid │ ├── java │ │ └── com │ │ │ └── eventyay │ │ │ └── organizer │ │ │ ├── common │ │ │ └── di │ │ │ │ └── module │ │ │ │ └── android │ │ │ │ └── FlavorModule.java │ │ │ ├── core │ │ │ ├── attendee │ │ │ │ ├── ScanQRView.java │ │ │ │ ├── ScanningDecider.java │ │ │ │ └── qrscan │ │ │ │ │ └── ScanQRActivity.java │ │ │ └── settings │ │ │ │ └── AcknowledgementDecider.java │ │ │ └── utils │ │ │ └── BrowserUtils.java │ └── res │ │ └── layout │ │ └── activity_scan_qr.xml │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── eventyay │ │ │ └── organizer │ │ │ ├── OrgaApplication.java │ │ │ ├── OrgaProvider.java │ │ │ ├── common │ │ │ ├── Constants.java │ │ │ ├── ContextManager.java │ │ │ ├── Function.java │ │ │ ├── Pipe.java │ │ │ ├── di │ │ │ │ ├── AppInjector.java │ │ │ │ ├── Injectable.java │ │ │ │ ├── OrgaViewModelFactory.java │ │ │ │ ├── component │ │ │ │ │ └── AppComponent.java │ │ │ │ └── module │ │ │ │ │ ├── AndroidModule.java │ │ │ │ │ ├── ApiModule.java │ │ │ │ │ ├── AppModule.java │ │ │ │ │ ├── ChangeListenerModule.java │ │ │ │ │ ├── ModelModule.java │ │ │ │ │ ├── NetworkModule.java │ │ │ │ │ ├── RepoModule.java │ │ │ │ │ ├── ViewModelKey.java │ │ │ │ │ ├── ViewModelModule.java │ │ │ │ │ └── android │ │ │ │ │ ├── AboutFragmentBuildersModule.java │ │ │ │ │ ├── ActivityBuildersModule.java │ │ │ │ │ ├── AuthFragmentBuildersModule.java │ │ │ │ │ ├── BarcodeFragmentBuildersModule.java │ │ │ │ │ ├── MainFragmentBuildersModule.java │ │ │ │ │ ├── OrganizerFragmentBuildersModule.java │ │ │ │ │ └── TracksFragmentBuildersModule.java │ │ │ ├── livedata │ │ │ │ └── SingleEventLiveData.java │ │ │ ├── model │ │ │ │ ├── HeaderProvider.java │ │ │ │ └── SimpleModel.java │ │ │ ├── mvp │ │ │ │ ├── presenter │ │ │ │ │ ├── AbstractBasePresenter.java │ │ │ │ │ ├── AbstractDetailPresenter.java │ │ │ │ │ ├── BasePresenter.java │ │ │ │ │ ├── DetailPresenter.java │ │ │ │ │ └── Presenter.java │ │ │ │ └── view │ │ │ │ │ ├── BaseActivity.java │ │ │ │ │ ├── BaseBottomSheetFragment.java │ │ │ │ │ ├── BaseDialogFragment.java │ │ │ │ │ ├── BaseFragment.java │ │ │ │ │ ├── BaseInjectActivity.java │ │ │ │ │ ├── Emptiable.java │ │ │ │ │ ├── Erroneous.java │ │ │ │ │ ├── ItemResult.java │ │ │ │ │ ├── Progressive.java │ │ │ │ │ ├── Refreshable.java │ │ │ │ │ └── Successful.java │ │ │ └── rx │ │ │ │ ├── Logger.java │ │ │ │ └── ViewTransformers.java │ │ │ ├── core │ │ │ ├── about │ │ │ │ └── AboutUsFragment.java │ │ │ ├── attendee │ │ │ │ ├── checkin │ │ │ │ │ ├── AttendeeCheckInFragment.java │ │ │ │ │ ├── AttendeeCheckInView.java │ │ │ │ │ └── AttendeeCheckInViewModel.java │ │ │ │ ├── history │ │ │ │ │ ├── CheckInHistoryAdapter.java │ │ │ │ │ ├── CheckInHistoryFragment.java │ │ │ │ │ ├── CheckInHistoryView.java │ │ │ │ │ ├── CheckInHistoryViewModel.java │ │ │ │ │ └── viewholder │ │ │ │ │ │ └── CheckInHistoryViewHolder.java │ │ │ │ ├── list │ │ │ │ │ ├── AttendeesFragment.java │ │ │ │ │ ├── AttendeesView.java │ │ │ │ │ ├── AttendeesViewModel.java │ │ │ │ │ ├── SwipeController.java │ │ │ │ │ ├── listeners │ │ │ │ │ │ └── AttendeeItemCheckInEvent.java │ │ │ │ │ └── viewholders │ │ │ │ │ │ └── AttendeeViewHolder.java │ │ │ │ └── qrscan │ │ │ │ │ └── ScanQRViewModel.java │ │ │ ├── auth │ │ │ │ ├── AuthActivity.java │ │ │ │ ├── SharedViewModel.java │ │ │ │ ├── login │ │ │ │ │ ├── LoginFragment.java │ │ │ │ │ ├── LoginView.java │ │ │ │ │ └── LoginViewModel.java │ │ │ │ ├── reset │ │ │ │ │ ├── ResetPasswordFragment.java │ │ │ │ │ ├── ResetPasswordView.java │ │ │ │ │ └── ResetPasswordViewModel.java │ │ │ │ ├── signup │ │ │ │ │ ├── SignUpFragment.java │ │ │ │ │ ├── SignUpView.java │ │ │ │ │ └── SignUpViewModel.java │ │ │ │ └── start │ │ │ │ │ ├── StartFragment.java │ │ │ │ │ ├── StartView.java │ │ │ │ │ └── StartViewModel.java │ │ │ ├── event │ │ │ │ ├── about │ │ │ │ │ ├── AboutEventActivity.java │ │ │ │ │ ├── AboutEventFragment.java │ │ │ │ │ ├── AboutEventView.java │ │ │ │ │ ├── AboutEventViewModel.java │ │ │ │ │ └── ToolbarColorChanger.java │ │ │ │ ├── chart │ │ │ │ │ ├── ChartActivity.java │ │ │ │ │ ├── ChartView.java │ │ │ │ │ └── ChartViewModel.java │ │ │ │ ├── copyright │ │ │ │ │ ├── CreateCopyrightFragment.java │ │ │ │ │ ├── CreateCopyrightView.java │ │ │ │ │ ├── CreateCopyrightViewModel.java │ │ │ │ │ └── update │ │ │ │ │ │ ├── UpdateCopyrightFragment.java │ │ │ │ │ │ ├── UpdateCopyrightView.java │ │ │ │ │ │ └── UpdateCopyrightViewModel.java │ │ │ │ ├── create │ │ │ │ │ ├── CreateEventActivity.java │ │ │ │ │ ├── CreateEventView.java │ │ │ │ │ ├── CreateEventViewModel.java │ │ │ │ │ ├── EventDetailsStepOne.java │ │ │ │ │ ├── EventDetailsStepOneView.java │ │ │ │ │ ├── EventDetailsStepThree.java │ │ │ │ │ ├── EventDetailsStepThreeView.java │ │ │ │ │ ├── EventDetailsStepTwo.java │ │ │ │ │ ├── EventDetailsStepTwoView.java │ │ │ │ │ ├── EventsViewPager.java │ │ │ │ │ ├── Location.java │ │ │ │ │ ├── PagerAdapter.java │ │ │ │ │ └── UpdateEventFragment.java │ │ │ │ ├── dashboard │ │ │ │ │ ├── EventDashboardFragment.java │ │ │ │ │ ├── EventDashboardPresenter.java │ │ │ │ │ ├── EventDashboardView.java │ │ │ │ │ └── analyser │ │ │ │ │ │ ├── ChartAnalyser.java │ │ │ │ │ │ └── TicketAnalyser.java │ │ │ │ └── list │ │ │ │ │ ├── EventListFragment.java │ │ │ │ │ ├── EventsView.java │ │ │ │ │ ├── EventsViewModel.java │ │ │ │ │ ├── pager │ │ │ │ │ ├── ListPageAdapter.java │ │ │ │ │ ├── ListPageFragment.java │ │ │ │ │ └── ListPageView.java │ │ │ │ │ └── sales │ │ │ │ │ ├── SalesSummaryFragment.java │ │ │ │ │ ├── SalesSummaryView.java │ │ │ │ │ └── SalesSummaryViewModel.java │ │ │ ├── faq │ │ │ │ ├── create │ │ │ │ │ ├── CreateFaqFragment.java │ │ │ │ │ ├── CreateFaqView.java │ │ │ │ │ └── CreateFaqViewModel.java │ │ │ │ └── list │ │ │ │ │ ├── FaqListAdapter.java │ │ │ │ │ ├── FaqListFragment.java │ │ │ │ │ ├── FaqListView.java │ │ │ │ │ ├── FaqListViewModel.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── FaqViewHolder.java │ │ │ ├── feedback │ │ │ │ └── list │ │ │ │ │ ├── FeedbackListAdapter.java │ │ │ │ │ ├── FeedbackListFragment.java │ │ │ │ │ ├── FeedbackListView.java │ │ │ │ │ ├── FeedbackListViewModel.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── FeedbackViewHolder.java │ │ │ ├── main │ │ │ │ ├── DrawerNavigator.java │ │ │ │ ├── EventViewModel.java │ │ │ │ ├── FragmentNavigator.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MainView.java │ │ │ │ └── OrganizerViewModel.java │ │ │ ├── notification │ │ │ │ └── list │ │ │ │ │ ├── NotificationsAdapter.java │ │ │ │ │ ├── NotificationsFragment.java │ │ │ │ │ ├── NotificationsView.java │ │ │ │ │ ├── NotificationsViewModel.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── NotificationsViewHolder.java │ │ │ ├── orders │ │ │ │ ├── create │ │ │ │ │ ├── CreateOrderFragment.java │ │ │ │ │ ├── CreateOrderView.java │ │ │ │ │ ├── CreateOrderViewModel.java │ │ │ │ │ ├── adapter │ │ │ │ │ │ └── CreateOrderTicketsAdapter.java │ │ │ │ │ └── viewholder │ │ │ │ │ │ └── CreateOrderTicketsViewHolder.java │ │ │ │ ├── detail │ │ │ │ │ ├── OrderDetailFragment.java │ │ │ │ │ ├── OrderDetailView.java │ │ │ │ │ ├── OrderDetailViewModel.java │ │ │ │ │ ├── SwipeController.java │ │ │ │ │ ├── adapter │ │ │ │ │ │ ├── OrderAttendeesAdapter.java │ │ │ │ │ │ ├── OrderDetailsPrintAdapter.java │ │ │ │ │ │ └── OrderTicketsAdapter.java │ │ │ │ │ └── viewholder │ │ │ │ │ │ ├── OrderAttendeesViewHolder.java │ │ │ │ │ │ └── OrderTicketsViewHolder.java │ │ │ │ └── list │ │ │ │ │ ├── OrdersAdapter.java │ │ │ │ │ ├── OrdersFragment.java │ │ │ │ │ ├── OrdersView.java │ │ │ │ │ ├── OrdersViewModel.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── OrderViewHolder.java │ │ │ ├── organizer │ │ │ │ ├── detail │ │ │ │ │ ├── OrganizerDetailActivity.java │ │ │ │ │ ├── OrganizerDetailFragment.java │ │ │ │ │ ├── OrganizerDetailView.java │ │ │ │ │ └── OrganizerDetailViewModel.java │ │ │ │ ├── password │ │ │ │ │ ├── ChangePasswordFragment.java │ │ │ │ │ ├── ChangePasswordView.java │ │ │ │ │ └── ChangePasswordViewModel.java │ │ │ │ └── update │ │ │ │ │ ├── UpdateOrganizerInfoFragment.java │ │ │ │ │ ├── UpdateOrganizerInfoView.java │ │ │ │ │ └── UpdateOrganizerInfoViewModel.java │ │ │ ├── role │ │ │ │ ├── invite │ │ │ │ │ ├── RoleInviteFragment.java │ │ │ │ │ ├── RoleInviteView.java │ │ │ │ │ └── RoleInviteViewModel.java │ │ │ │ └── list │ │ │ │ │ ├── RoleListAdapter.java │ │ │ │ │ ├── RoleListFragment.java │ │ │ │ │ ├── RoleListView.java │ │ │ │ │ ├── RoleListViewModel.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── RoleViewHolder.java │ │ │ ├── session │ │ │ │ ├── create │ │ │ │ │ ├── CreateSessionFragment.java │ │ │ │ │ ├── CreateSessionView.java │ │ │ │ │ └── CreateSessionViewModel.java │ │ │ │ └── list │ │ │ │ │ ├── SessionsAdapter.java │ │ │ │ │ ├── SessionsFragment.java │ │ │ │ │ ├── SessionsPresenter.java │ │ │ │ │ ├── SessionsView.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── SessionViewHolder.java │ │ │ ├── settings │ │ │ │ ├── CountryPreference.java │ │ │ │ ├── CountryPreferenceFragmentCompat.java │ │ │ │ ├── EventSettingsFragment.java │ │ │ │ ├── LegalPreferenceFragment.java │ │ │ │ ├── PaymentPrefsFragment.java │ │ │ │ ├── SalesDataSettings.java │ │ │ │ ├── ScanSettings.java │ │ │ │ ├── SettingsFragment.java │ │ │ │ ├── autocheckin │ │ │ │ │ ├── AutoCheckInAdapter.java │ │ │ │ │ ├── AutoCheckInFragment.java │ │ │ │ │ ├── AutoCheckInView.java │ │ │ │ │ ├── AutoCheckInViewHolder.java │ │ │ │ │ └── AutoCheckInViewModel.java │ │ │ │ └── restriction │ │ │ │ │ ├── CheckInRestrictionView.java │ │ │ │ │ ├── CheckInRestrictions.java │ │ │ │ │ ├── CheckInRestrictionsAdapter.java │ │ │ │ │ ├── RestrictionsViewHolder.java │ │ │ │ │ └── TicketSettingsViewModel.java │ │ │ ├── speaker │ │ │ │ ├── details │ │ │ │ │ ├── SpeakerDetailsActivity.java │ │ │ │ │ ├── SpeakerDetailsFragment.java │ │ │ │ │ ├── SpeakerDetailsView.java │ │ │ │ │ ├── SpeakerDetailsViewModel.java │ │ │ │ │ ├── SpeakersSessionsAdapter.java │ │ │ │ │ └── viewholder │ │ │ │ │ │ └── SessionViewHolder.java │ │ │ │ └── list │ │ │ │ │ ├── SpeakersAdapter.java │ │ │ │ │ ├── SpeakersFragment.java │ │ │ │ │ ├── SpeakersPresenter.java │ │ │ │ │ ├── SpeakersView.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── SpeakerViewHolder.java │ │ │ ├── speakerscall │ │ │ │ ├── create │ │ │ │ │ ├── CreateSpeakersCallFragment.java │ │ │ │ │ ├── CreateSpeakersCallView.java │ │ │ │ │ └── CreateSpeakersCallViewModel.java │ │ │ │ └── detail │ │ │ │ │ ├── SpeakersCallFragment.java │ │ │ │ │ ├── SpeakersCallPresenter.java │ │ │ │ │ └── SpeakersCallView.java │ │ │ ├── sponsor │ │ │ │ ├── create │ │ │ │ │ ├── CreateSponsorFragment.java │ │ │ │ │ ├── CreateSponsorView.java │ │ │ │ │ └── CreateSponsorViewModel.java │ │ │ │ └── list │ │ │ │ │ ├── SponsorsFragment.java │ │ │ │ │ ├── SponsorsListAdapter.java │ │ │ │ │ ├── SponsorsPresenter.java │ │ │ │ │ ├── SponsorsView.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── SponsorsViewHolder.java │ │ │ ├── ticket │ │ │ │ ├── create │ │ │ │ │ ├── CreateTicketFragment.java │ │ │ │ │ ├── CreateTicketView.java │ │ │ │ │ └── CreateTicketViewModel.java │ │ │ │ ├── detail │ │ │ │ │ ├── TicketDetailFragment.java │ │ │ │ │ ├── TicketDetailView.java │ │ │ │ │ ├── TicketDetailViewModel.java │ │ │ │ │ └── TicketPrintAdapter.java │ │ │ │ └── list │ │ │ │ │ ├── TicketsAdapter.java │ │ │ │ │ ├── TicketsFragment.java │ │ │ │ │ ├── TicketsPresenter.java │ │ │ │ │ ├── TicketsView.java │ │ │ │ │ └── viewholder │ │ │ │ │ └── TicketViewHolder.java │ │ │ └── track │ │ │ │ ├── create │ │ │ │ ├── CreateTrackFragment.java │ │ │ │ ├── CreateTrackView.java │ │ │ │ └── CreateTrackViewModel.java │ │ │ │ ├── list │ │ │ │ ├── TracksAdapter.java │ │ │ │ ├── TracksFragment.java │ │ │ │ ├── TracksPresenter.java │ │ │ │ ├── TracksView.java │ │ │ │ └── viewholder │ │ │ │ │ └── TracksViewHolder.java │ │ │ │ └── update │ │ │ │ ├── UpdateTrackFragment.java │ │ │ │ ├── UpdateTrackView.java │ │ │ │ └── UpdateTrackViewModel.java │ │ │ ├── data │ │ │ ├── AbstractObservable.java │ │ │ ├── AndroidUtils.java │ │ │ ├── Bus.java │ │ │ ├── ContextUtils.java │ │ │ ├── Preferences.java │ │ │ ├── RateLimiter.java │ │ │ ├── Repository.java │ │ │ ├── RxBus.java │ │ │ ├── SharedPreferencesImpl.java │ │ │ ├── attendee │ │ │ │ ├── Attendee.java │ │ │ │ ├── AttendeeApi.java │ │ │ │ ├── AttendeeCheckInWork.java │ │ │ │ ├── AttendeeDelegate.java │ │ │ │ ├── AttendeeDelegateImpl.java │ │ │ │ ├── AttendeeRepository.java │ │ │ │ ├── AttendeeRepositoryImpl.java │ │ │ │ └── CheckInDetail.java │ │ │ ├── auth │ │ │ │ ├── AuthApi.java │ │ │ │ ├── AuthHolder.java │ │ │ │ ├── AuthService.java │ │ │ │ ├── AuthServiceImpl.java │ │ │ │ └── model │ │ │ │ │ ├── ChangePassword.java │ │ │ │ │ ├── ChangePasswordResponse.java │ │ │ │ │ ├── CustomObjectWrapper.java │ │ │ │ │ ├── EmailRequest.java │ │ │ │ │ ├── EmailValidationResponse.java │ │ │ │ │ ├── EmailVerificationResponse.java │ │ │ │ │ ├── Login.java │ │ │ │ │ ├── LoginResponse.java │ │ │ │ │ ├── RequestToken.java │ │ │ │ │ ├── RequestTokenResponse.java │ │ │ │ │ ├── ResendVerificationMail.java │ │ │ │ │ ├── ResendVerificationMailResponse.java │ │ │ │ │ ├── SubmitEmailVerificationToken.java │ │ │ │ │ ├── SubmitToken.java │ │ │ │ │ └── SubmitTokenResponse.java │ │ │ ├── copyright │ │ │ │ ├── Copyright.java │ │ │ │ ├── CopyrightApi.java │ │ │ │ ├── CopyrightRepository.java │ │ │ │ └── CopyrightRepositoryImpl.java │ │ │ ├── db │ │ │ │ ├── DatabaseChangeListener.java │ │ │ │ ├── DatabaseRepository.java │ │ │ │ ├── DbFlowDatabaseChangeListener.java │ │ │ │ ├── DbFlowDatabaseRepository.java │ │ │ │ ├── QueryHelper.java │ │ │ │ └── configuration │ │ │ │ │ └── OrgaDatabase.java │ │ │ ├── encryption │ │ │ │ ├── EncryptionService.java │ │ │ │ └── EncryptionServiceImpl.java │ │ │ ├── error │ │ │ │ └── Error.java │ │ │ ├── event │ │ │ │ ├── Event.java │ │ │ │ ├── EventAnalyticsDelegate.java │ │ │ │ ├── EventApi.java │ │ │ │ ├── EventDelegate.java │ │ │ │ ├── EventDelegateImpl.java │ │ │ │ ├── EventRepository.java │ │ │ │ ├── EventRepositoryImpl.java │ │ │ │ ├── EventStatistics.java │ │ │ │ ├── SpeakerStatistics.java │ │ │ │ └── serializer │ │ │ │ │ └── ObservableString.java │ │ │ ├── faq │ │ │ │ ├── Faq.java │ │ │ │ ├── FaqApi.java │ │ │ │ ├── FaqRepository.java │ │ │ │ └── FaqRepositoryImpl.java │ │ │ ├── feedback │ │ │ │ ├── Feedback.java │ │ │ │ ├── FeedbackApi.java │ │ │ │ ├── FeedbackRepository.java │ │ │ │ └── FeedbackRepositoryImpl.java │ │ │ ├── image │ │ │ │ ├── ImageData.java │ │ │ │ ├── ImageUploadApi.java │ │ │ │ └── ImageUrl.java │ │ │ ├── network │ │ │ │ ├── ConnectionStatus.java │ │ │ │ ├── ConnectionStatusImpl.java │ │ │ │ └── HostSelectionInterceptor.java │ │ │ ├── notification │ │ │ │ ├── Notification.java │ │ │ │ ├── NotificationApi.java │ │ │ │ ├── NotificationRepository.java │ │ │ │ └── NotificationRepositoryImpl.java │ │ │ ├── order │ │ │ │ ├── Order.java │ │ │ │ ├── OrderApi.java │ │ │ │ ├── OrderRepository.java │ │ │ │ ├── OrderRepositoryImpl.java │ │ │ │ ├── OrderStatistics.java │ │ │ │ ├── Statistics.java │ │ │ │ └── model │ │ │ │ │ ├── OrderReceiptRequest.java │ │ │ │ │ └── OrderReceiptResponse.java │ │ │ ├── role │ │ │ │ ├── Role.java │ │ │ │ ├── RoleApi.java │ │ │ │ ├── RoleInvite.java │ │ │ │ ├── RoleRepository.java │ │ │ │ └── RoleRepositoryImpl.java │ │ │ ├── session │ │ │ │ ├── Session.java │ │ │ │ ├── SessionApi.java │ │ │ │ ├── SessionRepository.java │ │ │ │ └── SessionRepositoryImpl.java │ │ │ ├── speaker │ │ │ │ ├── Speaker.java │ │ │ │ ├── SpeakerApi.java │ │ │ │ ├── SpeakerRepository.java │ │ │ │ └── SpeakerRepositoryImpl.java │ │ │ ├── speakerscall │ │ │ │ ├── SpeakersCall.java │ │ │ │ ├── SpeakersCallApi.java │ │ │ │ ├── SpeakersCallRepository.java │ │ │ │ └── SpeakersCallRepositoryImpl.java │ │ │ ├── sponsor │ │ │ │ ├── Sponsor.java │ │ │ │ ├── SponsorApi.java │ │ │ │ ├── SponsorRepository.java │ │ │ │ └── SponsorRepositoryImpl.java │ │ │ ├── ticket │ │ │ │ ├── OnSiteTicket.java │ │ │ │ ├── OnSiteTicketSerializer.java │ │ │ │ ├── Ticket.java │ │ │ │ ├── TicketApi.java │ │ │ │ ├── TicketDelegate.java │ │ │ │ ├── TicketDelegateImpl.java │ │ │ │ ├── TicketRepository.java │ │ │ │ ├── TicketRepositoryImpl.java │ │ │ │ └── TypeQuantity.java │ │ │ ├── tracks │ │ │ │ ├── Track.java │ │ │ │ ├── TrackApi.java │ │ │ │ ├── TrackRepository.java │ │ │ │ └── TrackRepositoryImpl.java │ │ │ └── user │ │ │ │ ├── User.java │ │ │ │ ├── UserApi.java │ │ │ │ ├── UserRepository.java │ │ │ │ └── UserRepositoryImpl.java │ │ │ ├── ui │ │ │ ├── GlideAPI.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── PaletteHolder.java │ │ │ ├── ViewUtils.java │ │ │ ├── binding │ │ │ │ ├── BindingAdapters.java │ │ │ │ └── ImageBindings.java │ │ │ ├── editor │ │ │ │ └── RichEditorActivity.java │ │ │ └── views │ │ │ │ ├── AbstractDateTimePicker.java │ │ │ │ ├── DatePicker.java │ │ │ │ ├── OnDateTimeChangedListener.java │ │ │ │ └── TimePicker.java │ │ │ └── utils │ │ │ ├── CompareUtils.java │ │ │ ├── CurrencyUtils.java │ │ │ ├── DateUtils.java │ │ │ ├── ErrorUtils.java │ │ │ ├── JWTUtils.java │ │ │ ├── LinkHandler.java │ │ │ ├── SearchUtils.java │ │ │ ├── StringUtils.java │ │ │ ├── Utils.java │ │ │ ├── ValidateUtils.java │ │ │ └── service │ │ │ └── DateService.java │ └── res │ │ ├── anim │ │ ├── enter_from_left.xml │ │ └── exit_from_right.xml │ │ ├── color │ │ ├── menu_icon_color.xml │ │ └── menu_text_color.xml │ │ ├── drawable-xxhdpi │ │ └── ic_arrow_back_black.png │ │ ├── drawable │ │ ├── background_splash.xml │ │ ├── bottom_nav_selector.xml │ │ ├── circle_placeholder.xml │ │ ├── close.png │ │ ├── done.png │ │ ├── dotted.xml │ │ ├── frame_bottom_left.png │ │ ├── frame_bottom_right.png │ │ ├── frame_top_left.png │ │ ├── frame_top_right.png │ │ ├── header.png │ │ ├── ic_account.xml │ │ ├── ic_account_circle.xml │ │ ├── ic_add.xml │ │ ├── ic_announcement.xml │ │ ├── ic_arrow_drop_down.xml │ │ ├── ic_arrow_up.xml │ │ ├── ic_attendees.xml │ │ ├── ic_bank.xml │ │ ├── ic_camera.xml │ │ ├── ic_check.xml │ │ ├── ic_checkin.xml │ │ ├── ic_checkout.xml │ │ ├── ic_cheque.xml │ │ ├── ic_clock.xml │ │ ├── ic_close.xml │ │ ├── ic_coin.xml │ │ ├── ic_color_lens.xml │ │ ├── ic_contact.xml │ │ ├── ic_copyright.xml │ │ ├── ic_dashboard.xml │ │ ├── ic_delete.xml │ │ ├── ic_delete_white.xml │ │ ├── ic_domain_colored.xml │ │ ├── ic_earth.xml │ │ ├── ic_edit.xml │ │ ├── ic_email.xml │ │ ├── ic_empty.xml │ │ ├── ic_event_note.xml │ │ ├── ic_events.xml │ │ ├── ic_exit_full_screen.xml │ │ ├── ic_facebook.xml │ │ ├── ic_facebook_colored.xml │ │ ├── ic_faq.xml │ │ ├── ic_feedback.xml │ │ ├── ic_filter.xml │ │ ├── ic_format_bold.xml │ │ ├── ic_format_color_text.xml │ │ ├── ic_format_italic.xml │ │ ├── ic_format_list_bulleted.xml │ │ ├── ic_format_list_numbered.xml │ │ ├── ic_full_screen.xml │ │ ├── ic_gavel.xml │ │ ├── ic_gavel_black_24px.xml │ │ ├── ic_github_colored.xml │ │ ├── ic_google_plus.xml │ │ ├── ic_home.xml │ │ ├── ic_info.xml │ │ ├── ic_insert_link.xml │ │ ├── ic_instagram.xml │ │ ├── ic_link.xml │ │ ├── ic_link_black_24px.xml │ │ ├── ic_linkedin_colored.xml │ │ ├── ic_local_sync.xml │ │ ├── ic_location.xml │ │ ├── ic_logout.xml │ │ ├── ic_marker_active.xml │ │ ├── ic_more.xml │ │ ├── ic_nav_back.xml │ │ ├── ic_notifications_black_24dp.xml │ │ ├── ic_octagram.xml │ │ ├── ic_open_event_orga.png │ │ ├── ic_order.xml │ │ ├── ic_password.xml │ │ ├── ic_payment.xml │ │ ├── ic_people.xml │ │ ├── ic_person.xml │ │ ├── ic_phone.xml │ │ ├── ic_photo.xml │ │ ├── ic_photo_shutter.xml │ │ ├── ic_ray.xml │ │ ├── ic_receipt.xml │ │ ├── ic_redo.xml │ │ ├── ic_round_print.xml │ │ ├── ic_save.xml │ │ ├── ic_search.xml │ │ ├── ic_server_sync.xml │ │ ├── ic_settings.xml │ │ ├── ic_share.xml │ │ ├── ic_sort.xml │ │ ├── ic_speaker.xml │ │ ├── ic_sponsors.xml │ │ ├── ic_strikethrough.xml │ │ ├── ic_text.xml │ │ ├── ic_ticket.xml │ │ ├── ic_time.xml │ │ ├── ic_twitter.xml │ │ ├── ic_twitter_colored.xml │ │ ├── ic_type.xml │ │ ├── ic_undo.xml │ │ ├── qrcode_scan.xml │ │ └── rounded_rectangle.xml │ │ ├── layout │ │ ├── about_event_activity.xml │ │ ├── about_event_detail.xml │ │ ├── about_event_fragment.xml │ │ ├── about_us_fragment.xml │ │ ├── activity_chart.xml │ │ ├── activity_scan_qr.xml │ │ ├── attendee_layout.xml │ │ ├── auth_activity.xml │ │ ├── auth_url_container.xml │ │ ├── auto_check_in_fragment.xml │ │ ├── auto_check_in_layout.xml │ │ ├── bottomsheet_attendee_check_in.xml │ │ ├── change_password_fragment.xml │ │ ├── check_in_history_fragment.xml │ │ ├── check_in_history_layout.xml │ │ ├── copyright_create_form.xml │ │ ├── copyright_create_layout.xml │ │ ├── create_event_activity.xml │ │ ├── dialog_payment_country.xml │ │ ├── empty_layout.xml │ │ ├── ends_at_time_picker.xml │ │ ├── event_create_form.xml │ │ ├── event_create_layout.xml │ │ ├── event_details_step_one.xml │ │ ├── event_details_step_three.xml │ │ ├── event_details_step_two.xml │ │ ├── event_layout.xml │ │ ├── event_list_fragment.xml │ │ ├── event_owner_detail.xml │ │ ├── event_statistics.xml │ │ ├── faq_create_form.xml │ │ ├── faq_create_layout.xml │ │ ├── faq_layout.xml │ │ ├── faqs_fragment.xml │ │ ├── feedback_fragment.xml │ │ ├── feedbacklist_layout.xml │ │ ├── forgot_password_fragment.xml │ │ ├── fragment_attendees.xml │ │ ├── fragment_event_details.xml │ │ ├── fragment_list_page.xml │ │ ├── fragment_role_invite.xml │ │ ├── fragment_sales_summary.xml │ │ ├── header_layout.xml │ │ ├── login_fragment.xml │ │ ├── main_activity.xml │ │ ├── main_app_bar.xml │ │ ├── main_nav_header.xml │ │ ├── notification_item.xml │ │ ├── notifications_fragment.xml │ │ ├── order_attendee_layout.xml │ │ ├── order_create_layout.xml │ │ ├── order_create_ticket_layout.xml │ │ ├── order_detail_fragment.xml │ │ ├── order_detail_layout.xml │ │ ├── order_layout.xml │ │ ├── order_statistics.xml │ │ ├── order_ticket_layout.xml │ │ ├── orders_fragment.xml │ │ ├── organizer_detail_activity.xml │ │ ├── organizer_detail_fragment.xml │ │ ├── organizer_detail_layout.xml │ │ ├── payment_country_fragment.xml │ │ ├── progressbar_layout.xml │ │ ├── reset_password_by_token_fragment.xml │ │ ├── role_item.xml │ │ ├── roles_fragment.xml │ │ ├── session_create_form.xml │ │ ├── session_create_layout.xml │ │ ├── session_layout.xml │ │ ├── session_layout_core.xml │ │ ├── sessions_fragment.xml │ │ ├── share_event_layout.xml │ │ ├── sign_up_fragment.xml │ │ ├── speaker_details_activity.xml │ │ ├── speaker_details_fragment.xml │ │ ├── speaker_details_layout.xml │ │ ├── speaker_item.xml │ │ ├── speaker_session_layout.xml │ │ ├── speakers_call_create_form.xml │ │ ├── speakers_call_create_layout.xml │ │ ├── speakers_call_fragment.xml │ │ ├── speakers_fragment.xml │ │ ├── sponsor_create_form.xml │ │ ├── sponsor_create_layout.xml │ │ ├── sponsor_item.xml │ │ ├── sponsors_fragment.xml │ │ ├── start_fragment.xml │ │ ├── starts_at_time_picker.xml │ │ ├── text_editor_layout.xml │ │ ├── ticket_analytics.xml │ │ ├── ticket_analytics_item.xml │ │ ├── ticket_create_form.xml │ │ ├── ticket_create_layout.xml │ │ ├── ticket_detail_layout.xml │ │ ├── ticket_layout.xml │ │ ├── ticket_setting_layout.xml │ │ ├── ticket_settings_fragment.xml │ │ ├── tickets_fragment.xml │ │ ├── track_create_form.xml │ │ ├── track_create_layout.xml │ │ ├── track_item.xml │ │ ├── tracks_fragment.xml │ │ ├── update_organizer_form.xml │ │ └── update_organizer_layout.xml │ │ ├── menu │ │ ├── activity_main_drawer.xml │ │ ├── event_list_bottom.xml │ │ ├── menu_about_event.xml │ │ ├── menu_attendees.xml │ │ ├── menu_done.xml │ │ ├── menu_events.xml │ │ ├── menu_faqs.xml │ │ ├── menu_organizer.xml │ │ ├── menu_rich_editor.xml │ │ ├── menu_roles.xml │ │ ├── menu_sessions.xml │ │ ├── menu_share.xml │ │ ├── menu_speakers_call.xml │ │ ├── menu_sponsors.xml │ │ └── menu_tracks.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 │ │ ├── raw │ │ └── check_in_sound.wav │ │ ├── values-v19 │ │ └── styles.xml │ │ ├── values-v23 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── event_preferences.xml │ │ ├── legal_preferences.xml │ │ ├── payment_preferences.xml │ │ ├── preferences.xml │ │ ├── sales_data_display.xml │ │ └── scan_settings.xml │ ├── playStore │ ├── java │ │ └── com │ │ │ └── eventyay │ │ │ └── organizer │ │ │ ├── common │ │ │ └── di │ │ │ │ └── module │ │ │ │ └── android │ │ │ │ └── FlavorModule.java │ │ │ ├── core │ │ │ ├── attendee │ │ │ │ ├── ScanningDecider.java │ │ │ │ └── qrscan │ │ │ │ │ ├── BarcodeDetected.java │ │ │ │ │ ├── BarcodeGraphic.java │ │ │ │ │ ├── BarcodeGraphicTracker.java │ │ │ │ │ ├── BarcodeTrackerFactory.java │ │ │ │ │ ├── ScanQRActivity.java │ │ │ │ │ ├── ScanQRView.java │ │ │ │ │ └── widget │ │ │ │ │ ├── CameraSourcePreview.java │ │ │ │ │ └── GraphicOverlay.java │ │ │ └── settings │ │ │ │ └── AcknowledgementDecider.java │ │ │ └── utils │ │ │ └── BrowserUtils.java │ └── res │ │ └── layout │ │ └── activity_scan_qr.xml │ ├── playStoreTest │ └── core │ │ └── presenter │ │ └── ScanQRPresenterTest.java │ └── test │ ├── java │ └── com │ │ └── eventyay │ │ └── organizer │ │ ├── core │ │ ├── attendee │ │ │ ├── checkin │ │ │ │ └── AttendeeCheckInViewModelTest.java │ │ │ └── history │ │ │ │ └── CheckInHistoryViewModelTest.java │ │ ├── auth │ │ │ ├── login │ │ │ │ └── LoginViewModelTest.java │ │ │ ├── reset │ │ │ │ └── ResetPasswordViewModelTest.java │ │ │ ├── signup │ │ │ │ └── SignUpViewModelTest.java │ │ │ └── start │ │ │ │ └── StartViewModelTest.java │ │ ├── copyright │ │ │ ├── create │ │ │ │ └── CreateCopyrightViewModelTest.java │ │ │ └── update │ │ │ │ └── UpdateCopyrightViewModelTest.java │ │ ├── event │ │ │ ├── about │ │ │ │ └── AboutEventViewModelTest.java │ │ │ ├── list │ │ │ │ └── EventsViewModelTest.java │ │ │ └── sales │ │ │ │ └── SalesSummaryViewModelTest.java │ │ ├── faq │ │ │ ├── create │ │ │ │ └── CreateFaqViewModelTest.java │ │ │ └── list │ │ │ │ └── FaqListViewModelTest.java │ │ ├── feedback │ │ │ └── FeedbackListViewModelTest.java │ │ ├── main │ │ │ ├── DrawerNavigatorTest.java │ │ │ ├── EventViewModelTest.java │ │ │ ├── FragmentNavigatorTest.java │ │ │ └── OrganizerViewModelTest.java │ │ ├── orders │ │ │ ├── detail │ │ │ │ └── OrderDetailViewModelTest.java │ │ │ └── list │ │ │ │ └── OrdersViewModelTest.java │ │ ├── organizer │ │ │ ├── detail │ │ │ │ └── OrganizerDetailViewModelTest.java │ │ │ ├── password │ │ │ │ └── ChangePasswordViewModelTest.java │ │ │ └── update │ │ │ │ └── UpdateOrganizerInfoViewModelTest.java │ │ ├── presenter │ │ │ ├── EventDashboardPresenterTest.java │ │ │ ├── SessionsPresenterTest.java │ │ │ ├── SpeakersPresenterTest.java │ │ │ ├── TestUtil.java │ │ │ ├── TicketsPresenterTest.java │ │ │ └── TracksPresenterTest.java │ │ ├── session │ │ │ └── create │ │ │ │ └── CreateSessionViewModelTest.java │ │ ├── speaker │ │ │ └── details │ │ │ │ └── SpeakerDetailsViewModelTest.java │ │ ├── speakerscall │ │ │ ├── create │ │ │ │ └── CreateSpeakersCallViewModelTest.java │ │ │ └── detail │ │ │ │ └── SpeakersCallPresenterTest.java │ │ ├── sponsor │ │ │ ├── create │ │ │ │ └── CreateSponsorViewModelTest.java │ │ │ └── list │ │ │ │ └── SponsorsPresenterTest.java │ │ ├── ticket │ │ │ ├── create │ │ │ │ └── TicketCreateViewModelTest.java │ │ │ └── detail │ │ │ │ └── TicketDetailViewModelTest.java │ │ └── track │ │ │ ├── create │ │ │ └── CreateTrackViewModelTest.java │ │ │ └── update │ │ │ └── UpdateTrackViewModelTest.java │ │ ├── data │ │ ├── AbstractObservableTest.java │ │ ├── auth │ │ │ ├── AuthHolderTest.java │ │ │ └── AuthServiceTest.java │ │ └── repository │ │ │ ├── AttendeeRepositoryTest.java │ │ │ ├── CopyrightRepositoryTest.java │ │ │ ├── EventRepositoryTest.java │ │ │ ├── FaqRepositoryTest.java │ │ │ ├── OrderRepositoryTest.java │ │ │ ├── SessionRepositoryTest.java │ │ │ ├── SpeakerRepositoryTest.java │ │ │ ├── SpeakersCallRepositoryTest.java │ │ │ ├── SponsorRepositoryTest.java │ │ │ ├── TicketRepositoryTest.java │ │ │ └── TrackRepositoryTest.java │ │ ├── robo │ │ ├── TestApplication.java │ │ ├── db │ │ │ ├── BaseTest.java │ │ │ ├── DatabaseChangeListenerTest.java │ │ │ ├── DatabaseRepositoryTest.java │ │ │ └── TicketTest.java │ │ ├── rule │ │ │ └── DatabaseTestRule.java │ │ └── ui │ │ │ ├── ActivityInstanceTest.java │ │ │ ├── BaseParameterTest.java │ │ │ └── FragmentInstanceTest.java │ │ └── utils │ │ ├── CurrencyUtilsTest.java │ │ ├── DateServiceTest.java │ │ ├── DateUtilsTest.java │ │ ├── ErrorUtilsTest.java │ │ ├── JWTUtilsTest.java │ │ ├── LinkHandlerTest.java │ │ ├── SearchUtilsTest.java │ │ ├── StringUtilsTest.java │ │ ├── UtilsTest.java │ │ ├── ValidateUtilsTest.java │ │ ├── ViewUtilsTest.java │ │ ├── misc │ │ ├── ContextManagerTest.java │ │ ├── LoggerTest.java │ │ └── ViewTransformersTest.java │ │ └── ui │ │ └── ViewUtilsTest.java │ └── resources │ └── raw │ ├── content1.json │ ├── content2.json │ ├── content3.json │ ├── content4.json │ └── content5.json ├── build.gradle ├── docs ├── android-dev-setup.md ├── commitStyle.md └── images │ ├── attendees.png │ ├── organizer_app_branding.png │ └── organizer_app_logo.png ├── fastlane ├── Appfile ├── Fastfile └── metadata │ └── android │ └── en-US │ ├── changelogs │ ├── 12.txt │ ├── 13.txt │ ├── 15.txt │ ├── 16.txt │ ├── 17.txt │ ├── 7.txt │ ├── 8.txt │ └── 9.txt │ ├── full_description.txt │ ├── images │ ├── icon.png │ └── phoneScreenshots │ │ ├── checkin.png │ │ ├── create_ticket.png │ │ ├── dashboard_one.png │ │ ├── dashboard_two.png │ │ ├── login.png │ │ ├── navigation.png │ │ ├── order_checkin.png │ │ └── organizer.png │ ├── short_description.txt │ ├── title.txt │ └── video.txt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── scripts ├── .gitignore ├── prep-key.sh ├── secrets.tar.enc └── update-apk.sh ├── settings.gradle └── versions.gradle /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 4 9 | 10 | # We recommend you to keep these unchanged 11 | end_of_line = lf 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [*.md] 17 | trim_trailing_whitespace = false 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/chore.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Chore 3 | about: Issue related to docs, workflow, dependencies and others 4 | 5 | --- 6 | 7 | **Describe the chore** 8 | 9 | 10 | **Would you like to work on the issue?** 11 | 12 | - [ ] Yes 13 | - [ ] No 14 | - Other: 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Describe the feature you'd like** 8 | 9 | 10 | **Screenshots** 11 | 12 | 13 | **Additional context** 14 | 15 | 16 | **Would you like to work on the issue?** 17 | 18 | - [ ] Yes 19 | - [ ] No 20 | - Other: 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Fixes #[Add issue number here. If you do not solve the issue entirely, please change the message e.g. "First steps for issues #IssueNumber] 2 | 3 | Checklist: 4 | 5 | - [ ] I have checked for PMD and check-style issues 6 | - [ ] I have read the [Contribution & Best practices Guide](https://blog.fossasia.org/open-source-developer-guide-and-best-practices-at-fossasia) and my PR follows them. 7 | - [ ] My branch is up-to-date with the Upstream development branch. 8 | 9 | Changes: [Add here what changes were made in this issue and if possible provide links.] 10 | 11 | Screenshots for the change: 12 | -------------------------------------------------------------------------------- /.github/issue_label_bot.yaml: -------------------------------------------------------------------------------- 1 | label-alias: 2 | bug: 'bug' 3 | feature_request: 'feature' 4 | question: 'question' 5 | -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | **Describe the Issue** 2 | 3 | 4 | **Would you like to work on the issue?** 5 | 6 | - [ ] Yes 7 | - [ ] No 8 | - Other: 9 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: Release v$NEXT_MINOR_VERSION 🌈 2 | tag-template: v$NEXT_MINOR_VERSION 3 | categories: 4 | - title: 🚀 Features and Enhancements 5 | label: feature 6 | - title: 🐛 Bug Fixes 7 | label: fix 8 | - title: 🧰 Maintenance 9 | label: chore 10 | - title: Libraries and Dependencies 11 | label: dependencies 12 | change-template: '- $TITLE (#$NUMBER) - @$AUTHOR' 13 | template: | 14 | ## Changes 15 | 16 | $CHANGES 17 | 18 | ## Contributors 19 | 20 | Thanks a lot to our contributors for making this release possible: 21 | $CONTRIBUTORS 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | *.log 7 | *.tmp 8 | *.tmp.* 9 | log.txt 10 | *.sublime-project 11 | *.sublime-workspace 12 | .vscode/ 13 | npm-debug.log* 14 | 15 | .sass-cache/ 16 | .tmp/ 17 | .versions/ 18 | coverage/ 19 | $RECYCLE.BIN/ 20 | .DS_Store 21 | Thumbs.db 22 | UserInterfaceState.xcuserstate 23 | /.io-config.json 24 | 25 | *.iml 26 | .gradle 27 | /local.properties 28 | /.idea 29 | .DS_Store 30 | /build 31 | /captures 32 | .externalNativeBuild 33 | 34 | /app/build 35 | *apk 36 | .project 37 | local.properties 38 | .tool-versions 39 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | dist: trusty 3 | sudo: false 4 | jdk: 5 | - oraclejdk8 6 | android: 7 | components: 8 | - tools 9 | - android-28 10 | - build-tools-28.0.3 11 | - platform-tools 12 | before_cache: 13 | - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock 14 | cache: 15 | directories: 16 | - "${TRAVIS_BUILD_DIR}/gradle/caches/" 17 | - "${TRAVIS_BUILD_DIR}/gradle/wrapper/dists/" 18 | - "$HOME/.gradle/caches/" 19 | - "$HOME/.gradle/wrapper/" 20 | before_script: 21 | - bash scripts/prep-key.sh 22 | 23 | script: 24 | - ./gradlew assemblePlayStoreRelease 25 | - ./gradlew assembleFdroidRelease 26 | - ./gradlew testPlayStoreReleaseUnitTestCoverage 27 | after_success: 28 | - bash <(curl -s https://codecov.io/bash) 29 | - bash scripts/update-apk.sh 30 | 31 | branches: 32 | only: 33 | - master 34 | - development 35 | -------------------------------------------------------------------------------- /app/lombok.config: -------------------------------------------------------------------------------- 1 | lombok.anyConstructor.suppressConstructorProperties = true 2 | lombok.addGeneratedAnnotation = false 3 | lombok.addLombokGeneratedAnnotation = true 4 | -------------------------------------------------------------------------------- /app/src/androidTest/java/org/fossasia/openevent/app/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.InstrumentationRegistry; 6 | import androidx.test.runner.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.assertEquals; 12 | 13 | /** 14 | * Instrumentation test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getTargetContext(); 24 | 25 | assertEquals("com.eventyay.organizer", appContext.getPackageName()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/fdroid/java/com/eventyay/organizer/common/di/module/android/FlavorModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module.android; 2 | 3 | import com.eventyay.organizer.core.attendee.qrscan.ScanQRActivity; 4 | 5 | import dagger.Module; 6 | import dagger.android.ContributesAndroidInjector; 7 | 8 | @Module 9 | public abstract class FlavorModule { 10 | 11 | @ContributesAndroidInjector(modules = BarcodeFragmentBuildersModule.class) 12 | abstract ScanQRActivity contributeScanQRActivity(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/fdroid/java/com/eventyay/organizer/core/attendee/ScanQRView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import com.eventyay.organizer.data.attendee.Attendee; 6 | 7 | public interface ScanQRView { 8 | 9 | boolean hasCameraPermission(); 10 | 11 | void requestCameraPermission(); 12 | 13 | void showPermissionError(String error); 14 | 15 | void onScannedAttendee(Attendee attendee); 16 | 17 | void showBarcodePanel(boolean show); 18 | 19 | void showMessage(@NonNull int stringRes); 20 | 21 | void setTint(boolean matched); 22 | 23 | void showProgress(boolean show); 24 | 25 | void startScan(); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/fdroid/java/com/eventyay/organizer/core/attendee/ScanningDecider.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import com.eventyay.organizer.core.attendee.qrscan.ScanQRActivity; 7 | import com.eventyay.organizer.core.main.MainActivity; 8 | 9 | public class ScanningDecider { 10 | 11 | public void openScanQRActivity(Context context, long eventId) { 12 | Intent intent = new Intent(context, ScanQRActivity.class); 13 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 14 | intent.putExtra(MainActivity.EVENT_KEY, eventId); 15 | context.startActivity(intent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/fdroid/java/com/eventyay/organizer/core/settings/AcknowledgementDecider.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.settings; 2 | 3 | import android.content.Context; 4 | 5 | public class AcknowledgementDecider { 6 | 7 | public boolean shouldShowAcknowledgement() { 8 | return false; 9 | } 10 | 11 | public void openAcknowledgementsSection(Context context) { 12 | //do nothing 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/fdroid/java/com/eventyay/organizer/utils/BrowserUtils.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | import android.content.Context; 4 | import android.graphics.BitmapFactory; 5 | import android.net.Uri; 6 | 7 | import androidx.browser.customtabs.CustomTabsIntent; 8 | import androidx.core.content.ContextCompat; 9 | 10 | import com.eventyay.organizer.R; 11 | 12 | public final class BrowserUtils { 13 | 14 | private BrowserUtils() { 15 | } 16 | 17 | public static void launchUrl(Context context, String url) { 18 | if (!url.startsWith("http://") && !url.startsWith("https://")) { 19 | url = "https://" + url; 20 | } 21 | 22 | new CustomTabsIntent.Builder() 23 | .setToolbarColor(ContextCompat.getColor(context, R.color.color_primary_dark)) 24 | .setCloseButtonIcon(BitmapFactory.decodeResource(context.getResources(), 25 | R.drawable.ic_arrow_back_black)) 26 | .build() 27 | .launchUrl(context, Uri.parse(url)); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/Function.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | public interface Function { 6 | @NonNull 7 | R apply(@NonNull T var1); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/Pipe.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common; 2 | 3 | public interface Pipe { 4 | 5 | void push(T item); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/Injectable.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di; 2 | 3 | /** 4 | * Marks an activity / fragment injectable. 5 | */ 6 | public interface Injectable { 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/component/AppComponent.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.component; 2 | 3 | import com.eventyay.organizer.OrgaApplication; 4 | import com.eventyay.organizer.common.di.module.AppModule; 5 | import com.eventyay.organizer.common.di.module.android.ActivityBuildersModule; 6 | import com.eventyay.organizer.common.di.module.android.FlavorModule; 7 | import com.eventyay.organizer.data.attendee.AttendeeCheckInWork; 8 | 9 | import javax.inject.Singleton; 10 | 11 | import dagger.Component; 12 | import dagger.android.AndroidInjectionModule; 13 | import dagger.android.AndroidInjector; 14 | 15 | @Singleton 16 | @Component(modules = { 17 | AndroidInjectionModule.class, 18 | ActivityBuildersModule.class, 19 | AppModule.class, 20 | FlavorModule.class 21 | }) 22 | public interface AppComponent extends AndroidInjector { 23 | 24 | void inject(OrgaApplication orgaApplication); 25 | 26 | void inject(AttendeeCheckInWork attendeeCheckInWork); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/module/AppModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module; 2 | 3 | import dagger.Module; 4 | 5 | @Module(includes = { 6 | AndroidModule.class, 7 | RepoModule.class, 8 | ModelModule.class, 9 | NetworkModule.class, 10 | ViewModelModule.class 11 | }) 12 | public class AppModule { 13 | 14 | // Add misc dependencies 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/module/ViewModelKey.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module; 2 | 3 | import androidx.lifecycle.ViewModel; 4 | 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | import dagger.MapKey; 12 | 13 | @Documented 14 | @Target({ElementType.METHOD}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @MapKey 17 | @interface ViewModelKey { 18 | Class value(); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/module/android/AboutFragmentBuildersModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module.android; 2 | 3 | import com.eventyay.organizer.core.event.about.AboutEventFragment; 4 | import com.eventyay.organizer.core.event.copyright.CreateCopyrightFragment; 5 | import com.eventyay.organizer.core.event.copyright.update.UpdateCopyrightFragment; 6 | 7 | import dagger.Module; 8 | import dagger.android.ContributesAndroidInjector; 9 | 10 | @Module 11 | public abstract class AboutFragmentBuildersModule { 12 | 13 | @ContributesAndroidInjector 14 | abstract AboutEventFragment contributeAboutEventFragment(); 15 | 16 | @ContributesAndroidInjector 17 | abstract CreateCopyrightFragment contributeCreateCopyrightFragment(); 18 | 19 | @ContributesAndroidInjector 20 | abstract UpdateCopyrightFragment contributeUpdateCopyrightFragment(); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/module/android/AuthFragmentBuildersModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module.android; 2 | 3 | import com.eventyay.organizer.core.auth.login.LoginFragment; 4 | import com.eventyay.organizer.core.auth.reset.ResetPasswordFragment; 5 | import com.eventyay.organizer.core.auth.signup.SignUpFragment; 6 | import com.eventyay.organizer.core.auth.start.StartFragment; 7 | 8 | import dagger.Module; 9 | import dagger.android.ContributesAndroidInjector; 10 | 11 | @Module 12 | public abstract class AuthFragmentBuildersModule { 13 | 14 | @ContributesAndroidInjector 15 | abstract StartFragment contributeStartFragment(); 16 | 17 | @ContributesAndroidInjector 18 | abstract ResetPasswordFragment contributeResetPasswordFragment(); 19 | 20 | @ContributesAndroidInjector 21 | abstract LoginFragment contributeLoginFragment(); 22 | 23 | @ContributesAndroidInjector 24 | abstract SignUpFragment contributeSignupFragment(); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/module/android/BarcodeFragmentBuildersModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module.android; 2 | 3 | import com.eventyay.organizer.core.attendee.checkin.AttendeeCheckInFragment; 4 | 5 | import dagger.Module; 6 | import dagger.android.ContributesAndroidInjector; 7 | 8 | @Module 9 | public abstract class BarcodeFragmentBuildersModule { 10 | 11 | @ContributesAndroidInjector 12 | abstract AttendeeCheckInFragment contributeAttendeeCheckinFragment(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/di/module/android/OrganizerFragmentBuildersModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module.android; 2 | 3 | import com.eventyay.organizer.core.organizer.detail.OrganizerDetailFragment; 4 | import com.eventyay.organizer.core.organizer.password.ChangePasswordFragment; 5 | import com.eventyay.organizer.core.organizer.update.UpdateOrganizerInfoFragment; 6 | 7 | import dagger.Module; 8 | import dagger.android.ContributesAndroidInjector; 9 | 10 | @Module 11 | public abstract class OrganizerFragmentBuildersModule { 12 | 13 | @ContributesAndroidInjector 14 | abstract OrganizerDetailFragment contributeOrganizerDetailFragment(); 15 | 16 | @ContributesAndroidInjector 17 | abstract ChangePasswordFragment contributeChangePasswordFragment(); 18 | 19 | @ContributesAndroidInjector 20 | abstract UpdateOrganizerInfoFragment contributeUpdateOrganizerInfoFragment(); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/model/HeaderProvider.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.model; 2 | 3 | public interface HeaderProvider { 4 | String getHeader(); 5 | 6 | long getHeaderId(); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/presenter/AbstractDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.presenter; 2 | 3 | import androidx.annotation.CallSuper; 4 | 5 | public abstract class AbstractDetailPresenter extends AbstractBasePresenter implements DetailPresenter { 6 | 7 | private K id; 8 | 9 | @Override 10 | @CallSuper 11 | public void attach(K id, V view) { 12 | super.attach(view); 13 | this.id = id; 14 | } 15 | 16 | protected K getId() { 17 | return id; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/presenter/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.presenter; 2 | 3 | public interface BasePresenter { 4 | 5 | void start(); 6 | 7 | void detach(); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/presenter/DetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.presenter; 2 | 3 | public interface DetailPresenter extends BasePresenter { 4 | 5 | void attach(K key, V view); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/presenter/Presenter.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.presenter; 2 | 3 | public interface Presenter extends BasePresenter { 4 | 5 | void attach(V view); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | import androidx.appcompat.app.AppCompatDelegate; 5 | 6 | import com.eventyay.organizer.common.mvp.presenter.BasePresenter; 7 | 8 | import dagger.Lazy; 9 | 10 | public abstract class BaseActivity

extends AppCompatActivity { 11 | 12 | static { 13 | AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 14 | } 15 | 16 | protected abstract Lazy

getPresenterProvider(); 17 | 18 | protected P getPresenter() { 19 | return getPresenterProvider().get(); 20 | } 21 | 22 | @Override 23 | protected void onStop() { 24 | super.onStop(); 25 | getPresenter().detach(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/BaseDialogFragment.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | import androidx.fragment.app.DialogFragment; 4 | 5 | import com.eventyay.organizer.common.di.Injectable; 6 | import com.eventyay.organizer.common.mvp.presenter.BasePresenter; 7 | 8 | import dagger.Lazy; 9 | 10 | public class BaseDialogFragment

extends DialogFragment implements Injectable { 11 | 12 | @SuppressWarnings("PMD.EmptyMethodInAbstractClassShouldBeAbstract") 13 | protected Lazy

getPresenterProvider() { 14 | return null; 15 | } 16 | 17 | @SuppressWarnings("PMD.NullAssignment") 18 | protected P getPresenter() { 19 | Lazy

provider = getPresenterProvider(); 20 | return (provider == null) ? null : provider.get(); 21 | } 22 | 23 | @Override 24 | public void onStop() { 25 | super.onStop(); 26 | P presenter = getPresenter(); 27 | if (presenter != null) 28 | presenter.detach(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/BaseInjectActivity.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | import androidx.fragment.app.Fragment; 4 | 5 | import com.eventyay.organizer.common.mvp.presenter.BasePresenter; 6 | 7 | import javax.inject.Inject; 8 | 9 | import dagger.android.AndroidInjector; 10 | import dagger.android.DispatchingAndroidInjector; 11 | import dagger.android.support.HasSupportFragmentInjector; 12 | 13 | public abstract class BaseInjectActivity

extends BaseActivity

implements HasSupportFragmentInjector { 14 | 15 | @Inject 16 | DispatchingAndroidInjector dispatchingAndroidInjector; 17 | 18 | @Override 19 | public AndroidInjector supportFragmentInjector() { 20 | return dispatchingAndroidInjector; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/Emptiable.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | import java.util.List; 4 | 5 | public interface Emptiable { 6 | 7 | void showResults(List items); 8 | 9 | void showEmptyView(boolean show); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/Erroneous.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | public interface Erroneous { 4 | 5 | void showError(String error); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/ItemResult.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | public interface ItemResult { 4 | 5 | void showResult(T item); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/Progressive.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | public interface Progressive { 4 | 5 | void showProgress(boolean show); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/Refreshable.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | public interface Refreshable { 4 | 5 | void onRefreshComplete(boolean success); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/mvp/view/Successful.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.mvp.view; 2 | 3 | public interface Successful { 4 | 5 | void onSuccess(String message); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/common/rx/Logger.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.rx; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import java.util.List; 6 | 7 | import timber.log.Timber; 8 | 9 | public final class Logger { 10 | 11 | public static final String TEST_MESSAGE = "Test Error"; 12 | public static final Throwable TEST_ERROR = new Throwable(TEST_MESSAGE); 13 | 14 | private Logger() { 15 | // Never Called 16 | } 17 | 18 | public static void logSuccess(@NonNull T item) { 19 | Timber.i(item.getClass().getName() + " successfully loaded with value: " + item.toString()); 20 | } 21 | 22 | public static void logSuccess(@NonNull List items) { 23 | Timber.i("List of items successfully loaded with count: " + items.size()); 24 | } 25 | 26 | public static void logError(@NonNull Throwable throwable) { 27 | Timber.e(throwable, "An exception occurred : %s", throwable.getMessage()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/attendee/checkin/AttendeeCheckInView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.checkin; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.data.attendee.Attendee; 6 | 7 | public interface AttendeeCheckInView extends Erroneous, ItemResult { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/attendee/history/CheckInHistoryView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.history; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.attendee.CheckInDetail; 8 | 9 | public interface CheckInHistoryView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/attendee/history/viewholder/CheckInHistoryViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.history.viewholder; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.eventyay.organizer.data.attendee.CheckInDetail; 6 | import com.eventyay.organizer.databinding.CheckInHistoryLayoutBinding; 7 | 8 | public class CheckInHistoryViewHolder extends RecyclerView.ViewHolder { 9 | 10 | private final CheckInHistoryLayoutBinding binding; 11 | 12 | public CheckInHistoryViewHolder(CheckInHistoryLayoutBinding binding, int viewType) { 13 | super(binding.getRoot()); 14 | this.binding = binding; 15 | binding.timeMarker.initLine(viewType); 16 | } 17 | 18 | public void bind(CheckInDetail checkInDetail) { 19 | binding.setCheckTime(checkInDetail); 20 | binding.executePendingBindings(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/attendee/list/AttendeesView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.attendee.Attendee; 8 | 9 | import java.util.List; 10 | 11 | public interface AttendeesView extends Progressive, Refreshable, Erroneous, Emptiable { 12 | 13 | void showScanButton(boolean show); 14 | 15 | void updateAttendee(Attendee attendee); 16 | 17 | void showToggleDialog(long attendeeId); 18 | 19 | List getAttendeeList(); 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/attendee/list/viewholders/AttendeeViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.list.viewholders; 2 | 3 | import android.view.View; 4 | 5 | import androidx.recyclerview.widget.RecyclerView; 6 | 7 | import com.eventyay.organizer.data.attendee.Attendee; 8 | import com.eventyay.organizer.databinding.AttendeeLayoutBinding; 9 | 10 | public class AttendeeViewHolder extends RecyclerView.ViewHolder { 11 | 12 | private final AttendeeLayoutBinding binding; 13 | 14 | public AttendeeViewHolder(AttendeeLayoutBinding binding) { 15 | super(binding.getRoot()); 16 | this.binding = binding; 17 | } 18 | 19 | public void bindAttendee(Attendee attendee) { 20 | binding.setAttendee(attendee); 21 | binding.executePendingBindings(); 22 | } 23 | 24 | public void unbindAttendee() { 25 | binding.setAttendee(null); 26 | binding.executePendingBindings(); 27 | } 28 | 29 | public View getRoot() { 30 | return binding.getRoot(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/auth/SharedViewModel.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.auth; 2 | 3 | import androidx.lifecycle.LiveData; 4 | import androidx.lifecycle.MutableLiveData; 5 | import androidx.lifecycle.ViewModel; 6 | 7 | public class SharedViewModel extends ViewModel { 8 | 9 | private final MutableLiveData email = new MutableLiveData<>(); 10 | 11 | public void setEmail(String email) { 12 | this.email.setValue(email); 13 | } 14 | 15 | public LiveData getEmail() { 16 | return email; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/auth/login/LoginView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.auth.login; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface LoginView extends Progressive, Successful, Erroneous { 8 | 9 | void openResetPasswordFragment(boolean resetPassword); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/auth/reset/ResetPasswordView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.auth.reset; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface ResetPasswordView extends Progressive, Successful, Erroneous { 8 | 9 | void showMessage(String message); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/auth/signup/SignUpView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.auth.signup; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface SignUpView extends Progressive, Successful, Erroneous { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/auth/start/StartView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.auth.start; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | 6 | import java.util.Set; 7 | 8 | public interface StartView extends Progressive, Erroneous { 9 | 10 | void attachEmails(Set emails); 11 | 12 | void handleIntent(); 13 | 14 | void toNextAuthFragment(boolean isEmailRegistered); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/about/AboutEventView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.about; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.copyright.Copyright; 8 | import com.eventyay.organizer.data.event.Event; 9 | 10 | public interface AboutEventView extends Progressive, Erroneous, Refreshable, ItemResult { 11 | 12 | void setEventId(long id); 13 | 14 | void showCopyright(Copyright copyright); 15 | 16 | void changeCopyrightMenuItem(boolean creatingCopyright); 17 | 18 | void showCopyrightDeleted(String message); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/chart/ChartView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.chart; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | 6 | public interface ChartView extends Progressive, Erroneous { 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/copyright/CreateCopyrightView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.copyright; 2 | 3 | import com.eventyay.organizer.common.Function; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Successful; 7 | import com.google.android.material.textfield.TextInputLayout; 8 | 9 | public interface CreateCopyrightView extends Progressive, Erroneous, Successful { 10 | 11 | void dismiss(); 12 | 13 | void validate(TextInputLayout textInputLayout, Function function, String str); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/copyright/update/UpdateCopyrightView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.copyright.update; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | import com.eventyay.organizer.data.copyright.Copyright; 7 | 8 | public interface UpdateCopyrightView extends Progressive, Erroneous, Successful { 9 | 10 | void dismiss(); 11 | 12 | void setCopyright(Copyright copyright); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/CreateEventView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | import com.eventyay.organizer.common.Function; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Successful; 7 | import com.eventyay.organizer.data.event.Event; 8 | import com.google.android.material.textfield.TextInputLayout; 9 | 10 | import java.util.List; 11 | 12 | public interface CreateEventView extends Progressive, Erroneous, Successful { 13 | 14 | void validate(TextInputLayout textInputLayout, Function validation, String str); 15 | 16 | void attachCountryList(List countryList); 17 | 18 | void attachCurrencyCodesList(List currencyCodesList); 19 | 20 | void setPaymentCurrency(int index); 21 | 22 | void setPaymentBinding(Event event); 23 | 24 | List getTimeZoneList(); 25 | 26 | void setEvent(Event event); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/EventDetailsStepOneView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | 4 | import java.util.List; 5 | 6 | public interface EventDetailsStepOneView { 7 | 8 | List getTimeZoneList(); 9 | 10 | void setDefaultTimeZone(int index); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/EventDetailsStepThreeView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface EventDetailsStepThreeView extends Progressive, Erroneous, Successful { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/EventDetailsStepTwoView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | public interface EventDetailsStepTwoView { 4 | } 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/EventsViewPager.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.content.Context; 5 | import android.util.AttributeSet; 6 | import android.view.MotionEvent; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.annotation.Nullable; 10 | import androidx.viewpager.widget.ViewPager; 11 | 12 | public class EventsViewPager extends ViewPager { 13 | 14 | public EventsViewPager(@NonNull Context context) { 15 | super(context); 16 | } 17 | 18 | public EventsViewPager(@NonNull Context context, @Nullable AttributeSet attrs) { 19 | super(context, attrs); 20 | } 21 | 22 | @Override 23 | public boolean onInterceptTouchEvent(MotionEvent ev) { 24 | return false; 25 | } 26 | 27 | @SuppressLint("ClickableViewAccessibility") 28 | @Override 29 | public boolean onTouchEvent(MotionEvent ev) { 30 | return false; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/Location.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | public class Location { 4 | 5 | private double latitude; 6 | private double longitude; 7 | private CharSequence address; 8 | 9 | public Location(double latitude, double longitude, CharSequence address) { 10 | this.latitude = latitude; 11 | this.longitude = longitude; 12 | this.address = address; 13 | } 14 | 15 | public double getLatitude() { 16 | return latitude; 17 | } 18 | 19 | public double getLongitude() { 20 | return longitude; 21 | } 22 | 23 | public CharSequence getAddress() { 24 | return address; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/create/PagerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.create; 2 | 3 | import androidx.fragment.app.Fragment; 4 | import androidx.fragment.app.FragmentManager; 5 | import androidx.fragment.app.FragmentPagerAdapter; 6 | 7 | public class PagerAdapter extends FragmentPagerAdapter { 8 | 9 | private static final int PAGE_COUNT = 3; 10 | 11 | public PagerAdapter(FragmentManager fm) { 12 | super(fm); 13 | } 14 | 15 | @Override 16 | public Fragment getItem(int position) { 17 | switch (position) { 18 | case 0: 19 | return EventDetailsStepOne.newInstance(); 20 | case 1: 21 | return EventDetailsStepTwo.newInstance(); 22 | case 2: 23 | return EventDetailsStepThree.newInstance(); 24 | default: 25 | return null; 26 | } 27 | } 28 | 29 | @Override 30 | public int getCount() { 31 | return PAGE_COUNT; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/list/EventsView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Refreshable; 6 | 7 | public interface EventsView extends Progressive, Erroneous, Refreshable { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/list/pager/ListPageView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.list.pager; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.data.event.Event; 5 | 6 | public interface ListPageView extends Emptiable { 7 | 8 | void openSalesSummary(Long id); 9 | 10 | void closeSalesSummary(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/event/list/sales/SalesSummaryView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.event.list.sales; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.data.event.Event; 7 | 8 | public interface SalesSummaryView extends Progressive, Erroneous, ItemResult { 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/faq/create/CreateFaqView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.faq.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface CreateFaqView extends Progressive, Erroneous, Successful { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/faq/list/FaqListView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.faq.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.faq.Faq; 8 | 9 | public interface FaqListView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | 11 | void showMessage(String message); 12 | 13 | void exitContextualMenuMode(); 14 | 15 | void enterContextualMenuMode(); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/feedback/list/FeedbackListView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.feedback.list; 2 | 3 | 4 | import com.eventyay.organizer.common.mvp.view.Emptiable; 5 | import com.eventyay.organizer.common.mvp.view.Erroneous; 6 | import com.eventyay.organizer.common.mvp.view.Progressive; 7 | import com.eventyay.organizer.common.mvp.view.Refreshable; 8 | import com.eventyay.organizer.data.feedback.Feedback; 9 | 10 | public interface FeedbackListView extends Progressive, Erroneous, Refreshable, Emptiable { 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/main/MainView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.main; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.data.event.Event; 6 | import com.eventyay.organizer.data.user.User; 7 | 8 | public interface MainView extends Erroneous, ItemResult { 9 | 10 | void setEventId(long eventId); 11 | 12 | void showEventList(); 13 | 14 | void showDashboard(); 15 | 16 | void showOrganizer(User organizer); 17 | 18 | void invalidateDateViews(); 19 | 20 | void onLogout(); 21 | 22 | void unselectEvent(); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/notification/list/NotificationsView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.notification.list; 2 | 3 | import com.eventyay.organizer.data.notification.Notification; 4 | 5 | import java.util.List; 6 | 7 | public interface NotificationsView { 8 | 9 | void showError(String error); 10 | 11 | void showProgress(boolean show); 12 | 13 | void onRefreshComplete(boolean success); 14 | 15 | void showResults(List notifications); 16 | 17 | void showEmptyView(boolean show); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/notification/list/viewholder/NotificationsViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.notification.list.viewholder; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.eventyay.organizer.data.notification.Notification; 6 | import com.eventyay.organizer.databinding.NotificationItemBinding; 7 | 8 | public class NotificationsViewHolder extends RecyclerView.ViewHolder { 9 | 10 | private final NotificationItemBinding binding; 11 | 12 | public NotificationsViewHolder(NotificationItemBinding binding) { 13 | super(binding.getRoot()); 14 | this.binding = binding; 15 | } 16 | 17 | public void bind(Notification notification) { 18 | binding.setNotification(notification); 19 | binding.executePendingBindings(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/orders/create/CreateOrderView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.orders.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Refreshable; 6 | import com.eventyay.organizer.common.mvp.view.Successful; 7 | 8 | public interface CreateOrderView extends Progressive, Erroneous, Refreshable, Successful { 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/orders/detail/OrderDetailView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.orders.detail; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Refreshable; 6 | import com.eventyay.organizer.common.mvp.view.Successful; 7 | 8 | public interface OrderDetailView extends Progressive, Erroneous, Refreshable, Successful { 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/orders/detail/viewholder/OrderAttendeesViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.orders.detail.viewholder; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.eventyay.organizer.data.attendee.Attendee; 6 | import com.eventyay.organizer.databinding.OrderAttendeeLayoutBinding; 7 | 8 | public class OrderAttendeesViewHolder extends RecyclerView.ViewHolder { 9 | 10 | private final OrderAttendeeLayoutBinding binding; 11 | 12 | public OrderAttendeesViewHolder(OrderAttendeeLayoutBinding binding) { 13 | super(binding.getRoot()); 14 | this.binding = binding; 15 | } 16 | 17 | public void bind(Attendee attendee) { 18 | binding.setAttendee(attendee); 19 | binding.executePendingBindings(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/orders/detail/viewholder/OrderTicketsViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.orders.detail.viewholder; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.eventyay.organizer.data.ticket.Ticket; 6 | import com.eventyay.organizer.databinding.OrderTicketLayoutBinding; 7 | 8 | public class OrderTicketsViewHolder extends RecyclerView.ViewHolder { 9 | 10 | private final OrderTicketLayoutBinding binding; 11 | 12 | public OrderTicketsViewHolder(OrderTicketLayoutBinding binding) { 13 | super(binding.getRoot()); 14 | this.binding = binding; 15 | } 16 | 17 | public void bind(Ticket ticket) { 18 | binding.setTicket(ticket); 19 | binding.executePendingBindings(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/orders/list/OrdersView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.orders.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.order.Order; 8 | 9 | public interface OrdersView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | 11 | void showMessage(String message); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/organizer/detail/OrganizerDetailView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.organizer.detail; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Refreshable; 6 | import com.eventyay.organizer.data.user.User; 7 | 8 | public interface OrganizerDetailView extends Progressive, Erroneous, Refreshable { 9 | 10 | void showSnackbar(String message); 11 | 12 | void onSuccess(String message); 13 | 14 | void setUser(User user); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/organizer/password/ChangePasswordView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.organizer.password; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface ChangePasswordView extends Progressive, Successful, Erroneous { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/organizer/update/UpdateOrganizerInfoView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.organizer.update; 2 | 3 | import com.eventyay.organizer.common.Function; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Successful; 7 | import com.eventyay.organizer.data.user.User; 8 | import com.google.android.material.textfield.TextInputLayout; 9 | 10 | public interface UpdateOrganizerInfoView extends Progressive, Erroneous, Successful { 11 | 12 | void dismiss(); 13 | 14 | void validate(TextInputLayout textInputLayout, Function function, String str); 15 | 16 | void setUser(User user); 17 | 18 | void backPressed(); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/role/invite/RoleInviteView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.role.invite; 2 | 3 | public interface RoleInviteView { 4 | 5 | void showError(String error); 6 | 7 | void onSuccess(String message); 8 | 9 | void showProgress(boolean show); 10 | 11 | int getTitle(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/role/list/RoleListView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.role.list; 2 | 3 | import com.eventyay.organizer.data.role.RoleInvite; 4 | 5 | import java.util.List; 6 | 7 | public interface RoleListView { 8 | 9 | void showError(String error); 10 | 11 | void showProgress(boolean show); 12 | 13 | void onRefreshComplete(boolean success); 14 | 15 | void showResults(List items); 16 | 17 | void showEmptyView(boolean show); 18 | 19 | void exitContextualMenuMode(); 20 | 21 | void enterContextualMenuMode(); 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/session/create/CreateSessionView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.session.create; 2 | 3 | import com.eventyay.organizer.common.Function; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Successful; 7 | import com.eventyay.organizer.data.session.Session; 8 | import com.google.android.material.textfield.TextInputLayout; 9 | 10 | public interface CreateSessionView extends Progressive, Erroneous, Successful { 11 | 12 | void validate(TextInputLayout textInputLayout, Function function, String str); 13 | 14 | void setSession(Session session); 15 | 16 | void dismiss(); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/session/list/SessionsView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.session.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.session.Session; 8 | 9 | public interface SessionsView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | 11 | void showMessage(String message); 12 | 13 | void changeToolbarMode(boolean editMode, boolean deleteMode); 14 | 15 | void openUpdateSessionFragment(long sessionId); 16 | 17 | void exitContextualMenuMode(); 18 | 19 | void enterContextualMenuMode(); 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/settings/autocheckin/AutoCheckInView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.settings.autocheckin; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | 6 | public interface AutoCheckInView extends Progressive, Erroneous { 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/settings/restriction/CheckInRestrictionView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.settings.restriction; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | 6 | public interface CheckInRestrictionView extends Progressive, Erroneous { 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/speaker/details/SpeakerDetailsView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.speaker.details; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.session.Session; 8 | import com.eventyay.organizer.data.speaker.Speaker; 9 | 10 | import java.util.List; 11 | 12 | public interface SpeakerDetailsView extends Progressive, Erroneous, Refreshable, ItemResult { 13 | 14 | void showSessions(List sessions); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/speaker/details/viewholder/SessionViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.speaker.details.viewholder; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.eventyay.organizer.data.session.Session; 6 | import com.eventyay.organizer.databinding.SpeakerSessionLayoutBinding; 7 | 8 | public class SessionViewHolder extends RecyclerView.ViewHolder { 9 | private final SpeakerSessionLayoutBinding binding; 10 | 11 | public SessionViewHolder(SpeakerSessionLayoutBinding binding) { 12 | super(binding.getRoot()); 13 | this.binding = binding; 14 | } 15 | 16 | public void bind(Session session) { 17 | binding.setSession(session); 18 | binding.executePendingBindings(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/speaker/list/SpeakersView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.speaker.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.speaker.Speaker; 8 | 9 | public interface SpeakersView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | void openSpeakersDetailFragment(long speakerId); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/speakerscall/create/CreateSpeakersCallView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.speakerscall.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface CreateSpeakersCallView extends Progressive, Successful, Erroneous { 8 | 9 | void dismiss(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/speakerscall/detail/SpeakersCallView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.speakerscall.detail; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.speakerscall.SpeakersCall; 8 | 9 | public interface SpeakersCallView extends Progressive, Erroneous, Refreshable, ItemResult { 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/sponsor/create/CreateSponsorView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.sponsor.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | import com.eventyay.organizer.data.sponsor.Sponsor; 7 | 8 | public interface CreateSponsorView extends Progressive, Erroneous, Successful { 9 | 10 | void dismiss(); 11 | 12 | void setSponsor(Sponsor sponsor); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/sponsor/list/SponsorsView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.sponsor.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.sponsor.Sponsor; 8 | 9 | public interface SponsorsView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | 11 | void openUpdateSponsorFragment(long sponsorId); 12 | 13 | void showMessage(String message); 14 | 15 | void changeToolbarMode(boolean toolbarEdit, boolean toolbarDelete); 16 | 17 | void exitContextualMenuMode(); 18 | 19 | void enterContextualMenuMode(); 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/ticket/create/CreateTicketView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.ticket.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | 7 | public interface CreateTicketView extends Progressive, Erroneous, Successful { 8 | 9 | void dismiss(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/ticket/detail/TicketDetailView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.ticket.detail; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.ItemResult; 5 | import com.eventyay.organizer.data.ticket.Ticket; 6 | 7 | public interface TicketDetailView extends Erroneous, ItemResult { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/ticket/list/TicketsView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.ticket.list; 2 | 3 | 4 | import com.eventyay.organizer.common.mvp.view.Emptiable; 5 | import com.eventyay.organizer.common.mvp.view.Erroneous; 6 | import com.eventyay.organizer.common.mvp.view.Progressive; 7 | import com.eventyay.organizer.common.mvp.view.Refreshable; 8 | import com.eventyay.organizer.data.ticket.Ticket; 9 | 10 | public interface TicketsView extends Progressive, Erroneous, Refreshable, Emptiable { 11 | 12 | void showTicketDeleted(String message); 13 | 14 | void openTicketDetailFragment(long ticketId); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/track/create/CreateTrackView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.track.create; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | import com.eventyay.organizer.data.tracks.Track; 7 | 8 | public interface CreateTrackView extends Progressive, Erroneous, Successful { 9 | 10 | void dismiss(); 11 | 12 | void setTrack(Track track); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/track/list/TracksView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.track.list; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Emptiable; 4 | import com.eventyay.organizer.common.mvp.view.Erroneous; 5 | import com.eventyay.organizer.common.mvp.view.Progressive; 6 | import com.eventyay.organizer.common.mvp.view.Refreshable; 7 | import com.eventyay.organizer.data.tracks.Track; 8 | 9 | public interface TracksView extends Progressive, Erroneous, Refreshable, Emptiable { 10 | 11 | void openSessionsFragment(long trackId); 12 | 13 | void openUpdateTrackFragment(long trackId); 14 | 15 | void showDeleteDialog(); 16 | 17 | void showMessage(String message); 18 | 19 | void changeToolbarMode(boolean toolbarEdit, boolean toolbarDelete); 20 | 21 | void exitContextualMenuMode(); 22 | 23 | void enterContextualMenuMode(); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/core/track/update/UpdateTrackView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.track.update; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Erroneous; 4 | import com.eventyay.organizer.common.mvp.view.Progressive; 5 | import com.eventyay.organizer.common.mvp.view.Successful; 6 | import com.eventyay.organizer.data.tracks.Track; 7 | 8 | public interface UpdateTrackView extends Progressive, Erroneous, Successful { 9 | void dismiss(); 10 | 11 | void setTrack(Track track); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/Bus.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data; 2 | 3 | import com.eventyay.organizer.data.event.Event; 4 | 5 | import io.reactivex.Observable; 6 | 7 | public interface Bus { 8 | 9 | void pushSelectedEvent(Event event); 10 | 11 | Observable getSelectedEvent(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/ContextUtils.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data; 2 | 3 | import androidx.annotation.ColorInt; 4 | import androidx.annotation.ColorRes; 5 | import androidx.annotation.StringRes; 6 | 7 | import io.reactivex.Completable; 8 | 9 | public interface ContextUtils { 10 | 11 | String getResourceString(@StringRes int stringId); 12 | 13 | @ColorInt 14 | int getResourceColor(@ColorRes int colorId); 15 | 16 | Completable deleteDatabase(); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/Preferences.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data; 2 | 3 | import java.util.Set; 4 | 5 | public interface Preferences { 6 | 7 | String getString(String key, String defaultValue); 8 | 9 | void saveString(String key, String value); 10 | 11 | long getLong(String key, long defaultValue); 12 | 13 | void setLong(String key, long value); 14 | 15 | boolean getBoolean(String key, boolean defaultValue); 16 | 17 | void setBoolean(String key, boolean value); 18 | 19 | Set getStringSet(String key, Set defaultValue); 20 | 21 | void saveStringSet(String key, Set value); 22 | 23 | void addStringSetElement(String key, String value); 24 | 25 | void setInt(String key, int value); 26 | 27 | int getInt(String key, int value); 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/RxBus.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data; 2 | 3 | import com.eventyay.organizer.data.event.Event; 4 | 5 | import javax.inject.Inject; 6 | 7 | import io.reactivex.Observable; 8 | import io.reactivex.subjects.PublishSubject; 9 | 10 | public class RxBus implements Bus { 11 | private static PublishSubject eventPublisher = PublishSubject.create(); 12 | 13 | @Inject 14 | RxBus() { 15 | } 16 | 17 | @Override 18 | public void pushSelectedEvent(Event event) { 19 | eventPublisher.onNext(event); 20 | } 21 | 22 | @Override 23 | public Observable getSelectedEvent() { 24 | return eventPublisher; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/attendee/AttendeeDelegate.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.attendee; 2 | 3 | import android.view.View; 4 | 5 | import com.eventyay.organizer.common.model.HeaderProvider; 6 | import com.eventyay.organizer.core.attendee.list.viewholders.AttendeeViewHolder; 7 | 8 | import java.util.List; 9 | 10 | public interface AttendeeDelegate extends Comparable, HeaderProvider { 11 | long getIdentifier(); 12 | 13 | int getType(); 14 | 15 | int getLayoutRes(); 16 | 17 | AttendeeViewHolder getViewHolder(View view); 18 | 19 | void bindView(AttendeeViewHolder holder, List list); 20 | 21 | void unbindView(AttendeeViewHolder holder); 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/attendee/AttendeeRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.attendee; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | 8 | public interface AttendeeRepository { 9 | 10 | @NonNull 11 | Observable getAttendee(long attendeeId, boolean reload); 12 | 13 | @NonNull 14 | Observable getAttendees(long eventId, boolean reload); 15 | 16 | @NonNull 17 | Observable getAttendeesPageWise(long eventId, long pageNumber, boolean reload); 18 | 19 | @NonNull 20 | Observable getAttendeesUnderOrder(String orderIdentifier, long orderId, boolean reload); 21 | 22 | Completable scheduleToggle(Attendee attendee); 23 | 24 | @NonNull 25 | Observable toggleAttendeeCheckStatus(Attendee attendee); 26 | 27 | @NonNull 28 | Observable getPendingCheckIns(); 29 | 30 | @NonNull 31 | Observable getCheckedInAttendees(long eventId); 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/attendee/CheckInDetail.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.attendee; 2 | 3 | import com.github.jasminb.jsonapi.LongIdHandler; 4 | import com.github.jasminb.jsonapi.annotations.Id; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.Builder; 8 | import lombok.Data; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Data 12 | @Builder 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class CheckInDetail { 16 | 17 | @Id(LongIdHandler.class) 18 | public long id; 19 | 20 | public String checkTime; 21 | public String scanAction; 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/ChangePassword.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; 5 | import com.fasterxml.jackson.databind.annotation.JsonNaming; 6 | 7 | import lombok.AllArgsConstructor; 8 | import lombok.Data; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Data 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @JsonNaming(PropertyNamingStrategy.KebabCaseStrategy.class) 15 | public class ChangePassword { 16 | 17 | public String oldPassword; 18 | public String newPassword; 19 | 20 | @JsonIgnore 21 | public String confirmNewPassword; 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/ChangePasswordResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; 4 | import com.fasterxml.jackson.databind.annotation.JsonNaming; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | @JsonNaming(PropertyNamingStrategy.KebabCaseStrategy.class) 14 | public class ChangePasswordResponse { 15 | 16 | public int id; 17 | public String email; 18 | public String name; 19 | public String passwordChanged; 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/CustomObjectWrapper.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import java.util.Collections; 4 | import java.util.Map; 5 | 6 | /* 7 | * This class helps to wrap java objects with custom objects such that users can define 8 | * their own tags to wrap objects with while serialising in JSON. 9 | */ 10 | 11 | public final class CustomObjectWrapper { 12 | 13 | private CustomObjectWrapper() { 14 | } 15 | 16 | public static Map withLabel(String outerWrap, E wrappedObject) { 17 | return Collections.singletonMap(outerWrap, wrappedObject); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/EmailRequest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class EmailRequest { 11 | 12 | public String email; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/EmailValidationResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class EmailValidationResponse { 13 | public Boolean exists; 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/EmailVerificationResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class EmailVerificationResponse { 7 | 8 | public String message; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/Login.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class Login { 11 | public String email; 12 | public String password; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/LoginResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; 4 | import com.fasterxml.jackson.databind.annotation.JsonNaming; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 14 | public class LoginResponse { 15 | public String accessToken; 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/RequestToken.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class RequestToken { 11 | 12 | public String email; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/RequestTokenResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; 4 | import com.fasterxml.jackson.databind.annotation.JsonNaming; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 14 | public class RequestTokenResponse { 15 | 16 | public String message; 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/ResendVerificationMail.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 4 | import com.fasterxml.jackson.annotation.JsonTypeName; 5 | 6 | import lombok.Data; 7 | 8 | @Data 9 | @JsonTypeName("data") 10 | @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 11 | public class ResendVerificationMail { 12 | 13 | public String email; 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/ResendVerificationMailResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ResendVerificationMailResponse { 7 | 8 | public String message; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/SubmitEmailVerificationToken.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class SubmitEmailVerificationToken { 11 | 12 | public String token; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/SubmitToken.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class SubmitToken { 13 | 14 | public String token; 15 | public String password; 16 | 17 | @JsonIgnore 18 | public String confirmPassword; 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/auth/model/SubmitTokenResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.auth.model; 2 | 3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; 4 | import com.fasterxml.jackson.databind.annotation.JsonNaming; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 14 | public class SubmitTokenResponse { 15 | 16 | public int id; 17 | public String email; 18 | public String name; 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/copyright/CopyrightApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.copyright; 2 | 3 | import io.reactivex.Completable; 4 | import io.reactivex.Observable; 5 | import retrofit2.http.Body; 6 | import retrofit2.http.DELETE; 7 | import retrofit2.http.GET; 8 | import retrofit2.http.PATCH; 9 | import retrofit2.http.POST; 10 | import retrofit2.http.Path; 11 | 12 | public interface CopyrightApi { 13 | 14 | @POST("event-copyrights") 15 | Observable postCopyright(@Body Copyright copyright); 16 | 17 | @GET("events/{eventId}/event-copyright?include=event&fields[event]=id&page[size]=0") 18 | Observable getCopyright(@Path("eventId") long eventId); 19 | 20 | @PATCH("event-copyrights/{id}") 21 | Observable patchCopyright(@Path("id") long id, @Body Copyright copyright); 22 | 23 | @DELETE("event-copyrights/{id}") 24 | Completable deleteCopyright(@Path("id") long id); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/copyright/CopyrightRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.copyright; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | 8 | public interface CopyrightRepository { 9 | 10 | @NonNull 11 | Observable createCopyright(Copyright copyright); 12 | 13 | @NonNull 14 | Observable getCopyright(long id, boolean reload); 15 | 16 | @NonNull 17 | Observable updateCopyright(Copyright copyright); 18 | 19 | @NonNull 20 | Completable deleteCopyright(long id); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/db/DatabaseChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.db; 2 | 3 | import io.reactivex.Observable; 4 | 5 | public interface DatabaseChangeListener { 6 | 7 | Observable> getNotifier(); 8 | 9 | void startListening(); 10 | 11 | void stopListening(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/db/DatabaseRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.db; 2 | 3 | import com.raizlabs.android.dbflow.sql.language.SQLOperator; 4 | 5 | import java.util.List; 6 | 7 | import io.reactivex.Completable; 8 | import io.reactivex.Observable; 9 | 10 | public interface DatabaseRepository { 11 | 12 | Observable getItems(Class typeClass, SQLOperator... conditions); 13 | 14 | Observable getAllItems(Class typeClass); 15 | 16 | Completable save(Class classType, T item); 17 | 18 | Completable saveList(Class itemClass, List items); 19 | 20 | Completable update(Class classType, T item); 21 | 22 | Completable delete(Class typeClass, SQLOperator... conditions); 23 | 24 | Completable deleteAll(Class typeClass); 25 | 26 | @SuppressWarnings("unchecked") 27 | Completable deleteAll(Class... typeClass); 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/encryption/EncryptionService.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.encryption; 2 | 3 | 4 | public interface EncryptionService { 5 | 6 | String encrypt(String credential); 7 | 8 | String decrypt(String encryptedCredentials); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/error/Error.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.error; 2 | 3 | import com.eventyay.organizer.utils.Utils; 4 | 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class Error { 11 | 12 | public String title; 13 | public String detail; 14 | public String pointer; 15 | 16 | @Override 17 | public String toString() { 18 | 19 | if (Utils.isEmpty(title)) { 20 | if (!Utils.isEmpty(detail)) { 21 | if (Utils.isEmpty(pointer)) { 22 | return detail; 23 | } else { 24 | return detail + " - " + pointer; 25 | } 26 | } 27 | } else { 28 | if (Utils.isEmpty(pointer)) { 29 | return title + ": " + detail; 30 | } else { 31 | return title + ": " + detail + " - " + pointer; 32 | } 33 | } 34 | 35 | return null; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/event/EventDelegate.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.event; 2 | 3 | import com.eventyay.organizer.common.model.HeaderProvider; 4 | 5 | public interface EventDelegate extends Comparable, HeaderProvider { 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/event/EventRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.event; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import com.eventyay.organizer.data.image.ImageData; 6 | import com.eventyay.organizer.data.image.ImageUrl; 7 | 8 | import io.reactivex.Observable; 9 | 10 | public interface EventRepository { 11 | 12 | Observable getEvent(long eventId, boolean reload); 13 | 14 | @NonNull 15 | Observable getEvents(boolean reload); 16 | 17 | @NonNull 18 | Observable updateEvent(Event event); 19 | 20 | Observable createEvent(Event event); 21 | 22 | Observable getEventStatistics(long id); 23 | 24 | Observable uploadEventImage(ImageData imageData); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/event/SpeakerStatistics.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.event; 2 | 3 | 4 | import com.eventyay.organizer.data.db.configuration.OrgaDatabase; 5 | import com.github.jasminb.jsonapi.LongIdHandler; 6 | import com.github.jasminb.jsonapi.annotations.Id; 7 | import com.github.jasminb.jsonapi.annotations.Type; 8 | import com.raizlabs.android.dbflow.annotation.PrimaryKey; 9 | import com.raizlabs.android.dbflow.annotation.Table; 10 | 11 | import lombok.Data; 12 | import lombok.NoArgsConstructor; 13 | import lombok.ToString; 14 | 15 | @Data 16 | @Type("speakerStatistics") 17 | @NoArgsConstructor 18 | @ToString() 19 | @Table(database = OrgaDatabase.class, allFields = true) 20 | public class SpeakerStatistics { 21 | 22 | @Id(LongIdHandler.class) 23 | @PrimaryKey 24 | public Long id; 25 | 26 | public Long accepted; 27 | public Long confirmed; 28 | public Long pending; 29 | public Long rejected; 30 | public Long total; 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/event/serializer/ObservableString.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.event.serializer; 2 | 3 | import androidx.databinding.ObservableField; 4 | 5 | public class ObservableString extends ObservableField { 6 | 7 | public ObservableString() { 8 | } 9 | 10 | public ObservableString(String string) { 11 | super(string); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/faq/FaqApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.faq; 2 | 3 | import java.util.List; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | import retrofit2.http.Body; 8 | import retrofit2.http.DELETE; 9 | import retrofit2.http.GET; 10 | import retrofit2.http.POST; 11 | import retrofit2.http.Path; 12 | 13 | public interface FaqApi { 14 | 15 | @GET("events/{id}/faqs?include=event&fields[event]=id&page[size]=0") 16 | Observable> getFaqs(@Path("id") long id); 17 | 18 | @POST("faqs") 19 | Observable postFaq(@Body Faq faq); 20 | 21 | @DELETE("faqs/{id}") 22 | Completable deleteFaq(@Path("id") long id); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/faq/FaqRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.faq; 2 | 3 | import io.reactivex.Completable; 4 | import io.reactivex.Observable; 5 | 6 | public interface FaqRepository { 7 | 8 | Observable getFaqs(long id, boolean reload); 9 | 10 | Observable createFaq(Faq faq); 11 | 12 | Completable deleteFaq(long id); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/feedback/FeedbackApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.feedback; 2 | 3 | import java.util.List; 4 | 5 | import io.reactivex.Observable; 6 | import retrofit2.http.GET; 7 | import retrofit2.http.Path; 8 | 9 | public interface FeedbackApi { 10 | 11 | @GET("events/{id}/feedbacks?include=event,user&fields[event]=id&page[size]=0") 12 | Observable> getFeedbacks(@Path("id") long id); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/feedback/FeedbackRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.feedback; 2 | 3 | import io.reactivex.Observable; 4 | 5 | public interface FeedbackRepository { 6 | Observable getFeedbacks(long id, boolean reload); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/image/ImageData.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.image; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ImageData { 9 | private String data; 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/image/ImageUploadApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.image; 2 | 3 | import io.reactivex.Observable; 4 | import retrofit2.http.Body; 5 | import retrofit2.http.POST; 6 | 7 | public interface ImageUploadApi { 8 | 9 | @POST("upload/image") 10 | Observable postOriginalImage(@Body ImageData data); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/image/ImageUrl.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.image; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class ImageUrl { 11 | private String url; 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/network/ConnectionStatus.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.network; 2 | 3 | public interface ConnectionStatus { 4 | 5 | boolean isConnected(); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/notification/NotificationApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.notification; 2 | 3 | import java.util.List; 4 | 5 | import io.reactivex.Observable; 6 | import retrofit2.http.GET; 7 | import retrofit2.http.Path; 8 | 9 | public interface NotificationApi { 10 | 11 | @GET("/v1/users/{user_id}/notifications") 12 | Observable> getNotifications(@Path("user_id") int user_id); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/notification/NotificationRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.notification; 2 | 3 | import io.reactivex.Observable; 4 | 5 | public interface NotificationRepository { 6 | 7 | Observable getNotifications(int userId, boolean reload); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/order/OrderRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.order; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import com.eventyay.organizer.data.order.model.OrderReceiptRequest; 6 | 7 | import io.reactivex.Completable; 8 | import io.reactivex.Observable; 9 | 10 | public interface OrderRepository { 11 | 12 | Observable createOrder(Order order); 13 | 14 | Observable getOrders(long id, boolean reload); 15 | 16 | @NonNull 17 | Observable getOrder(String orderIdentifier, boolean reload); 18 | 19 | Observable getOrderStatisticsForEvent(long eventId, boolean reload); 20 | 21 | Completable sendReceipt(OrderReceiptRequest orderReceipt); 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/order/Statistics.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.order; 2 | 3 | import com.eventyay.organizer.data.db.configuration.OrgaDatabase; 4 | import com.github.jasminb.jsonapi.LongIdHandler; 5 | import com.github.jasminb.jsonapi.annotations.Id; 6 | import com.github.jasminb.jsonapi.annotations.Type; 7 | import com.raizlabs.android.dbflow.annotation.PrimaryKey; 8 | import com.raizlabs.android.dbflow.annotation.Table; 9 | 10 | import lombok.Data; 11 | import lombok.NoArgsConstructor; 12 | import lombok.ToString; 13 | 14 | @Data 15 | @Type("statistics") 16 | @NoArgsConstructor 17 | @ToString() 18 | @Table(database = OrgaDatabase.class, allFields = true) 19 | public class Statistics { 20 | 21 | @Id(LongIdHandler.class) 22 | @PrimaryKey 23 | public Long id; 24 | 25 | public Long draft; 26 | public Long cancelled; 27 | public Long pending; 28 | public Long placed; 29 | public long total; 30 | public Long expired; 31 | public long completed; 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/order/model/OrderReceiptRequest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.order.model; 2 | 3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; 4 | import com.fasterxml.jackson.databind.annotation.JsonNaming; 5 | 6 | import lombok.Data; 7 | 8 | @Data 9 | @JsonNaming(PropertyNamingStrategy.KebabCaseStrategy.class) 10 | public class OrderReceiptRequest { 11 | 12 | public String orderIdentifier; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/order/model/OrderReceiptResponse.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.order.model; 2 | 3 | public class OrderReceiptResponse { 4 | 5 | public String message; 6 | public String error; 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/role/RoleApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.role; 2 | 3 | import java.util.List; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | import retrofit2.http.Body; 8 | import retrofit2.http.DELETE; 9 | import retrofit2.http.GET; 10 | import retrofit2.http.POST; 11 | import retrofit2.http.Path; 12 | 13 | public interface RoleApi { 14 | 15 | @POST("role-invites") 16 | Observable postRoleInvite(@Body RoleInvite roleInvite); 17 | 18 | @GET("events/{id}/role-invites") 19 | Observable> getRoles(@Path("id") long id); 20 | 21 | @DELETE("role-invites/{role_invite_id}") 22 | Completable deleteRole(@Path("role_invite_id") long roleInviteId); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/role/RoleRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.role; 2 | 3 | import io.reactivex.Completable; 4 | import io.reactivex.Observable; 5 | 6 | public interface RoleRepository { 7 | 8 | Observable sendRoleInvite(RoleInvite roleInvite); 9 | 10 | Observable getRoles(long eventId, boolean forceReload); 11 | 12 | Completable deleteRole(long roleInviteId); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/session/SessionRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.session; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | 8 | public interface SessionRepository { 9 | 10 | Observable getSessions(long id, boolean reload); 11 | 12 | @NonNull 13 | Observable getSession(long sessionId, boolean reload); 14 | 15 | Observable getSessionsUnderSpeaker(long speakerId, boolean reload); 16 | 17 | Observable createSession(Session session); 18 | 19 | @NonNull 20 | Observable updateSession(Session session); 21 | 22 | Completable deleteSession(long id); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/speaker/SpeakerApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.speaker; 2 | 3 | import java.util.List; 4 | 5 | import io.reactivex.Observable; 6 | import retrofit2.http.GET; 7 | import retrofit2.http.Path; 8 | 9 | public interface SpeakerApi { 10 | 11 | @GET("events/{id}/speakers?include=event&fields[event]=id&page[size]=0") 12 | Observable> getSpeakers(@Path("id") long id); 13 | 14 | @GET("speakers/{speaker_id}") 15 | Observable getSpeaker(@Path("speaker_id") long id); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/speaker/SpeakerRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.speaker; 2 | 3 | import io.reactivex.Observable; 4 | 5 | public interface SpeakerRepository { 6 | 7 | Observable getSpeakers(long id, boolean reload); 8 | 9 | Observable getSpeaker(long speakerId, boolean reload); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/speakerscall/SpeakersCallApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.speakerscall; 2 | 3 | import io.reactivex.Observable; 4 | import retrofit2.http.Body; 5 | import retrofit2.http.GET; 6 | import retrofit2.http.PATCH; 7 | import retrofit2.http.POST; 8 | import retrofit2.http.Path; 9 | 10 | public interface SpeakersCallApi { 11 | 12 | @GET("events/{id}/speakers-call?include=event&fields[event]=id&page[size]=0") 13 | Observable getSpeakersCall(@Path("id") long id); 14 | 15 | @POST("speakers-calls") 16 | Observable postSpeakersCall(@Body SpeakersCall speakersCall); 17 | 18 | @PATCH("speakers-calls/{id}") 19 | Observable updateSpeakersCall(@Path("id") long id, @Body SpeakersCall speakersCall); 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/speakerscall/SpeakersCallRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.speakerscall; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import io.reactivex.Observable; 6 | 7 | public interface SpeakersCallRepository { 8 | 9 | Observable getSpeakersCall(long id, boolean reload); 10 | 11 | Observable createSpeakersCall(SpeakersCall speakersCall); 12 | 13 | @NonNull 14 | Observable updateSpeakersCall(SpeakersCall speakersCall); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/sponsor/SponsorRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.sponsor; 2 | 3 | import io.reactivex.Completable; 4 | import io.reactivex.Observable; 5 | 6 | public interface SponsorRepository { 7 | 8 | Observable getSponsors(long eventId, boolean reload); 9 | 10 | Observable getSponsor(long sponsorId, boolean reload); 11 | 12 | Observable createSponsor(Sponsor sponsor); 13 | 14 | Observable updateSponsor(Sponsor sponsor); 15 | 16 | Completable deleteSponsor(long id); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/ticket/TicketDelegate.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.ticket; 2 | 3 | public interface TicketDelegate extends Comparable { 4 | } 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/ticket/TicketDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.ticket; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import com.eventyay.organizer.utils.CompareUtils; 6 | 7 | public class TicketDelegateImpl implements TicketDelegate { 8 | 9 | private final Ticket ticket; 10 | 11 | public TicketDelegateImpl(Ticket ticket) { 12 | this.ticket = ticket; 13 | } 14 | 15 | @Override 16 | public int compareTo(@NonNull Ticket otherOne) { 17 | return CompareUtils.compareCascading(ticket, otherOne, Ticket::getType); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/ticket/TypeQuantity.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.ticket; 2 | 3 | import com.eventyay.organizer.data.db.configuration.OrgaDatabase; 4 | import com.raizlabs.android.dbflow.annotation.QueryModel; 5 | 6 | import lombok.Data; 7 | 8 | @Data 9 | @QueryModel(database = OrgaDatabase.class, allFields = true) 10 | public class TypeQuantity { 11 | public String type; 12 | public long quantity; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/tracks/TrackApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.tracks; 2 | 3 | import java.util.List; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | import retrofit2.http.Body; 8 | import retrofit2.http.DELETE; 9 | import retrofit2.http.GET; 10 | import retrofit2.http.PATCH; 11 | import retrofit2.http.POST; 12 | import retrofit2.http.Path; 13 | 14 | public interface TrackApi { 15 | 16 | @GET("events/{id}/tracks?include=event&fields[event]=id&page[size]=0") 17 | Observable> getTracks(@Path("id") long id); 18 | 19 | @POST("tracks") 20 | Observable postTrack(@Body Track track); 21 | 22 | @GET("tracks/{track_id}") 23 | Observable getTrack(@Path("track_id") long id); 24 | 25 | @PATCH("tracks/{track_id}") 26 | Observable updateTrack(@Path("track_id") long id, @Body Track track); 27 | 28 | @DELETE("tracks/{track_id}") 29 | Completable deleteTrack(@Path("track_id") long id); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/tracks/TrackRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.tracks; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import io.reactivex.Completable; 6 | import io.reactivex.Observable; 7 | 8 | public interface TrackRepository { 9 | Observable getTracks(long id, boolean reload); 10 | 11 | Observable createTrack(Track track); 12 | 13 | @NonNull 14 | Observable getTrack(long trackId, boolean reload); 15 | 16 | @NonNull 17 | Observable updateTrack(Track track); 18 | 19 | @NonNull 20 | Completable deleteTrack(long id); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/user/UserApi.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.user; 2 | 3 | import io.reactivex.Observable; 4 | import retrofit2.http.Body; 5 | import retrofit2.http.GET; 6 | import retrofit2.http.PATCH; 7 | import retrofit2.http.Path; 8 | 9 | public interface UserApi { 10 | 11 | @PATCH("users/{id}") 12 | Observable patchUser(@Path("id") long id, @Body User user); 13 | 14 | @GET("users/{id}") 15 | Observable getOrganizer(@Path("id") long id); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/data/user/UserRepository.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.data.user; 2 | 3 | import com.eventyay.organizer.data.image.ImageData; 4 | import com.eventyay.organizer.data.image.ImageUrl; 5 | 6 | import io.reactivex.Observable; 7 | 8 | 9 | public interface UserRepository { 10 | 11 | Observable updateUser(User user); 12 | 13 | Observable getOrganizer(boolean reload); 14 | 15 | Observable uploadOrganizerImage(ImageData imageData); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/ui/HeaderViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.ui; 2 | 3 | import androidx.recyclerview.widget.RecyclerView; 4 | 5 | import com.eventyay.organizer.databinding.HeaderLayoutBinding; 6 | 7 | public class HeaderViewHolder extends RecyclerView.ViewHolder { 8 | private final HeaderLayoutBinding binding; 9 | 10 | public HeaderViewHolder(HeaderLayoutBinding binding) { 11 | super(binding.getRoot()); 12 | this.binding = binding; 13 | } 14 | 15 | public void bindHeader(String header) { 16 | binding.setSubheading(header); 17 | binding.executePendingBindings(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/ui/views/OnDateTimeChangedListener.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.ui.views; 2 | 3 | import com.eventyay.organizer.data.event.serializer.ObservableString; 4 | 5 | public interface OnDateTimeChangedListener { 6 | void onDateChanged(ObservableString newDate); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/utils/CompareUtils.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | import com.eventyay.organizer.common.Function; 4 | 5 | import java.util.Locale; 6 | 7 | public final class CompareUtils { 8 | 9 | private CompareUtils() { 10 | // Never Called 11 | } 12 | 13 | private static String apply(Function mapper, T item) { 14 | return mapper.apply(item).toLowerCase(Locale.getDefault()); 15 | } 16 | 17 | @SafeVarargs 18 | public static int compareCascading(T one, T two, Function... mappers) { 19 | for (Function mapper : mappers) { 20 | int current = apply(mapper, one).compareTo(apply(mapper, two)); 21 | if (current != 0) 22 | return current; 23 | } 24 | return 0; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/eventyay/organizer/utils/StringUtils.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | public final class StringUtils { 4 | 5 | private StringUtils() { 6 | } 7 | 8 | public static String emptyToNull(String str) { 9 | if (str == null || str.isEmpty()) 10 | return null; 11 | else 12 | return str; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/anim/enter_from_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/exit_from_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/color/menu_icon_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/menu_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_arrow_back_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable-xxhdpi/ic_arrow_back_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bottom_nav_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_placeholder.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/done.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/dotted.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/frame_bottom_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/frame_bottom_left.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/frame_bottom_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/frame_bottom_right.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/frame_top_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/frame_top_left.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/frame_top_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/frame_top_right.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/header.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_account.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_account_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_announcement.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_down.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_attendees.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bank.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_camera.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checkin.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checkout.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cheque.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clock.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_coin.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_color_lens.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_contact.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dashboard.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_white.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_domain_colored.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_earth.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_email.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_empty.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_event_note.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_events.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_exit_full_screen.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_facebook.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_facebook_colored.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_faq.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_feedback.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_format_bold.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_format_color_text.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_format_italic.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_format_list_bulleted.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_format_list_numbered.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_full_screen.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_gavel.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_gavel_black_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_google_plus.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_insert_link.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_instagram.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_link.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_link_black_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_linkedin_colored.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_local_sync.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_location.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_logout.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_marker_active.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_nav_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notifications_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_octagram.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_open_event_orga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/drawable/ic_open_event_orga.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_password.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_payment.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_people.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_person.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_phone.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_photo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_photo_shutter.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ray.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_receipt.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_redo.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_print.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_server_sync.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_speaker.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sponsors.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_text.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ticket.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_time.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_twitter.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_twitter_colored.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_type.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_undo.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qrcode_scan.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rectangle.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/about_event_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/about_us_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/auth_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_payment_country.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_list_page.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/organizer_detail_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/payment_country_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/progressbar_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/speaker_details_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/speaker_session_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 11 | 15 | 16 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/menu/event_list_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_about_event.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_faqs.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_organizer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_rich_editor.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_roles.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_sessions.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_share.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_speakers_call.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_sponsors.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_tracks.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/raw/check_in_sound.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/app/src/main/res/raw/check_in_sound.wav -------------------------------------------------------------------------------- /app/src/main/res/values-v19/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/xml/event_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/xml/legal_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/xml/sales_data_display.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/xml/scan_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 15 | 16 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/playStore/java/com/eventyay/organizer/common/di/module/android/FlavorModule.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.common.di.module.android; 2 | 3 | import com.eventyay.organizer.core.attendee.qrscan.ScanQRActivity; 4 | 5 | import dagger.Module; 6 | import dagger.android.ContributesAndroidInjector; 7 | 8 | @Module 9 | public abstract class FlavorModule { 10 | 11 | @ContributesAndroidInjector(modules = BarcodeFragmentBuildersModule.class) 12 | abstract ScanQRActivity contributeScanQRActivity(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/playStore/java/com/eventyay/organizer/core/attendee/ScanningDecider.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import com.eventyay.organizer.core.attendee.qrscan.ScanQRActivity; 7 | import com.eventyay.organizer.core.main.MainActivity; 8 | 9 | public class ScanningDecider { 10 | 11 | public void openScanQRActivity(Context context, long eventId) { 12 | Intent intent = new Intent(context, ScanQRActivity.class); 13 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 14 | intent.putExtra(MainActivity.EVENT_KEY, eventId); 15 | context.startActivity(intent); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/playStore/java/com/eventyay/organizer/core/attendee/qrscan/BarcodeDetected.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.qrscan; 2 | 3 | import com.eventyay.organizer.data.attendee.Attendee; 4 | import com.google.android.gms.vision.barcode.Barcode; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.subjects.PublishSubject; 9 | 10 | public class BarcodeDetected { 11 | 12 | public void onBarcodeDetected(Barcode barcode, PublishSubject detect, 13 | PublishSubject data, List attendees) { 14 | 15 | detect.onNext(barcode == null); 16 | 17 | if (barcode == null || attendees.isEmpty()) 18 | return; 19 | 20 | data.onNext(barcode.displayValue); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/playStore/java/com/eventyay/organizer/core/attendee/qrscan/ScanQRView.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.attendee.qrscan; 2 | 3 | import com.eventyay.organizer.common.mvp.view.Progressive; 4 | import com.eventyay.organizer.data.attendee.Attendee; 5 | 6 | import io.reactivex.annotations.NonNull; 7 | 8 | public interface ScanQRView extends Progressive { 9 | 10 | boolean hasCameraPermission(); 11 | 12 | void requestCameraPermission(); 13 | 14 | void showPermissionError(String error); 15 | 16 | void onScannedAttendee(Attendee attendee); 17 | 18 | void showBarcodePanel(boolean show); 19 | 20 | void showMessage(@NonNull int stringRes); 21 | 22 | void setTint(boolean matched); 23 | 24 | void startScan(); 25 | 26 | void stopScan(); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/playStore/java/com/eventyay/organizer/core/settings/AcknowledgementDecider.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.settings; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import com.google.android.gms.oss.licenses.OssLicensesMenuActivity; 7 | 8 | public class AcknowledgementDecider { 9 | 10 | public boolean shouldShowAcknowledgement() { 11 | return true; 12 | } 13 | 14 | public void openAcknowledgementsSection(Context context) { 15 | Intent intent = new Intent(context, OssLicensesMenuActivity.class); 16 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 17 | context.startActivity(intent); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/playStore/java/com/eventyay/organizer/utils/BrowserUtils.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | import android.content.Context; 4 | import android.net.Uri; 5 | import androidx.browser.customtabs.CustomTabsIntent; 6 | 7 | public final class BrowserUtils { 8 | 9 | private BrowserUtils() { 10 | } 11 | 12 | public static void launchUrl(Context context, String url) { 13 | CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); 14 | CustomTabsIntent customTabsIntent = builder.build(); 15 | customTabsIntent.launchUrl(context, Uri.parse(url)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/core/presenter/TestUtil.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.core.presenter; 2 | 3 | import com.eventyay.organizer.common.rx.Logger; 4 | 5 | import io.reactivex.Observable; 6 | 7 | public final class TestUtil { 8 | 9 | public static final Observable ERROR_OBSERVABLE = Observable.error(Logger.TEST_ERROR); 10 | 11 | private TestUtil() { 12 | // Never Called 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/robo/TestApplication.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.robo; 2 | 3 | import android.Manifest; 4 | 5 | import com.eventyay.organizer.OrgaApplication; 6 | import com.eventyay.organizer.OrgaProvider; 7 | 8 | import org.robolectric.RuntimeEnvironment; 9 | import org.robolectric.Shadows; 10 | 11 | public class TestApplication extends OrgaApplication { 12 | 13 | @Override 14 | public void onCreate() { 15 | OrgaProvider.context = RuntimeEnvironment.application; 16 | 17 | // We want pervasive testing of the app 18 | Shadows.shadowOf(this).grantPermissions(Manifest.permission.CAMERA); 19 | 20 | super.onCreate(); 21 | } 22 | 23 | @Override 24 | protected boolean isTestBuild() { 25 | return true; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/robo/db/BaseTest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.robo.db; 2 | 3 | import android.app.Application; 4 | 5 | import com.eventyay.organizer.robo.rule.DatabaseTestRule; 6 | 7 | import org.junit.Before; 8 | import org.junit.Rule; 9 | import org.junit.runner.RunWith; 10 | import org.robolectric.RobolectricTestRunner; 11 | import org.robolectric.annotation.Config; 12 | 13 | @RunWith(RobolectricTestRunner.class) 14 | @Config(sdk = Config.OLDEST_SDK, application = Application.class) 15 | public abstract class BaseTest { 16 | 17 | @Rule 18 | public final DatabaseTestRule dbRule = DatabaseTestRule.create(); 19 | 20 | @Before 21 | public final void before() { 22 | setUp(); 23 | } 24 | 25 | public abstract void setUp(); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/robo/ui/BaseParameterTest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.robo.ui; 2 | 3 | import com.eventyay.organizer.robo.TestApplication; 4 | 5 | import org.junit.runner.RunWith; 6 | import org.robolectric.ParameterizedRobolectricTestRunner; 7 | import org.robolectric.annotation.Config; 8 | 9 | @SuppressWarnings({"PMD.AbstractClassWithoutAnyMethod", "PMD.AbstractClassWithoutAbstractMethod"}) 10 | @RunWith(ParameterizedRobolectricTestRunner.class) 11 | @Config(sdk = Config.OLDEST_SDK, application = TestApplication.class) 12 | public abstract class BaseParameterTest { 13 | } 14 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/utils/CurrencyUtilsTest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.assertEquals; 7 | 8 | public class CurrencyUtilsTest { 9 | 10 | private CurrencyUtils currencyUtils; 11 | 12 | @Before 13 | public void setUp() { 14 | currencyUtils = new CurrencyUtils(); 15 | } 16 | 17 | @Test 18 | public void testDollar() { 19 | assertEquals("US$", currencyUtils.getCurrencySymbol("USD").blockingGet()); 20 | } 21 | 22 | @Test 23 | public void testRupee() { 24 | assertEquals("Rs.", currencyUtils.getCurrencySymbol("INR").blockingGet()); 25 | } 26 | 27 | @Test 28 | public void testPound() { 29 | assertEquals("£", currencyUtils.getCurrencySymbol("GBP").blockingGet()); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/utils/StringUtilsTest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.assertEquals; 6 | 7 | public class StringUtilsTest { 8 | 9 | @Test 10 | public void testNullifyEmptyStrings() { 11 | String emptyString = ""; 12 | String nullString = null; 13 | 14 | String outputString = StringUtils.emptyToNull(emptyString); 15 | assertEquals(nullString, outputString); 16 | } 17 | 18 | @Test 19 | public void shouldReturnNullOnNullStrings() { 20 | String nullString = null; 21 | 22 | String outputString = StringUtils.emptyToNull(nullString); 23 | assertEquals(nullString, outputString); 24 | } 25 | 26 | @Test 27 | public void shouldReturnNonEmptyOrNonNullStrings() { 28 | String dataString = "This is not empty"; 29 | 30 | String outputString = StringUtils.emptyToNull(dataString); 31 | assertEquals(dataString, outputString); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/test/java/com/eventyay/organizer/utils/ViewUtilsTest.java: -------------------------------------------------------------------------------- 1 | package com.eventyay.organizer.utils; 2 | 3 | import android.view.View; 4 | 5 | import com.eventyay.organizer.ui.ViewUtils; 6 | 7 | import org.junit.Rule; 8 | import org.junit.Test; 9 | import org.mockito.Mock; 10 | import org.mockito.Mockito; 11 | import org.mockito.junit.MockitoJUnit; 12 | import org.mockito.junit.MockitoRule; 13 | 14 | public class ViewUtilsTest { 15 | 16 | @Rule 17 | public MockitoRule mockitoRule = MockitoJUnit.rule(); 18 | @Mock 19 | private View view; 20 | 21 | @Test 22 | public void shouldShowView() { 23 | ViewUtils.showView(view, true); 24 | 25 | Mockito.verify(view).setVisibility(View.VISIBLE); 26 | } 27 | 28 | @Test 29 | public void shouldHideView() { 30 | ViewUtils.showView(view, false); 31 | 32 | Mockito.verify(view).setVisibility(View.GONE); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/test/resources/raw/content1.json: -------------------------------------------------------------------------------- 1 | { 2 | "errors": [ 3 | { 4 | "status": "422", 5 | "source": { 6 | "pointer": "/data/attributes/licence" 7 | }, 8 | "detail": "Missing data for required field.", 9 | "title": "Validation error" 10 | } 11 | ], 12 | "jsonapi": { 13 | "version": "1.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/test/resources/raw/content2.json: -------------------------------------------------------------------------------- 1 | { 2 | "errors": [ 3 | { 4 | "status": "422", 5 | "source": { 6 | "pointer": "" 7 | }, 8 | "detail": "Missing data for required field.", 9 | "title": "Validation error" 10 | } 11 | ], 12 | "jsonapi": { 13 | "version": "1.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/test/resources/raw/content3.json: -------------------------------------------------------------------------------- 1 | { 2 | "errors": [ 3 | { 4 | "status": "422", 5 | "source": { 6 | 7 | }, 8 | "detail": "Missing data for required field.", 9 | "title": "Validation error" 10 | } 11 | ], 12 | "jsonapi": { 13 | "version": "1.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/test/resources/raw/content4.json: -------------------------------------------------------------------------------- 1 | { 2 | "errors": [ 3 | { 4 | "status": "400", 5 | "source": { 6 | 7 | }, 8 | "detail": "The URL does not exist", 9 | "title": "Bad Request" 10 | } 11 | ], 12 | "jsonapi": { 13 | "version": "1.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/test/resources/raw/content5.json: -------------------------------------------------------------------------------- 1 | { 2 | "errors": [ 3 | { 4 | "status": "403", 5 | "source": { 6 | "pointer": "/data/attributes/order_id" 7 | }, 8 | "detail": "Co-Organizer access required", 9 | "title": "Access Forbidden" 10 | } 11 | ], 12 | "jsonapi": { 13 | "version": "1.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/images/attendees.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/docs/images/attendees.png -------------------------------------------------------------------------------- /docs/images/organizer_app_branding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/docs/images/organizer_app_branding.png -------------------------------------------------------------------------------- /docs/images/organizer_app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/docs/images/organizer_app_logo.png -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file("./scripts/fastlane.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one 2 | package_name("com.eventyay.organizer") # e.g. com.krausefx.app 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/12.txt: -------------------------------------------------------------------------------- 1 | Several features and bugfixes -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/13.txt: -------------------------------------------------------------------------------- 1 | 🚀 Features and Enhancements 2 | 3 | - feat: Implement list of roles 4 | 5 | 🐛 Bug Fixes 6 | 7 | - fix: Prevent empty view layout from showing when items are present 8 | - fix: Retain 'Use picker' checkbox state on screen rotation 9 | 10 | 🧰 Maintenance 11 | 12 | - chore: Simplify the app 13 | - chore: Dismiss RoleInviteFragment after invitation is sent 14 | - chore: Add 'Use another URL' button for base URL 15 | - chore: Remove option to change base URL in release build -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/15.txt: -------------------------------------------------------------------------------- 1 | 🚀 Features and Enhancements 2 | 3 | - feat: Deletion of roles 4 | - feat: Implement Mapbox for event location in F-Droid build variant 5 | - feat: Implement sound for check-in and check-out 6 | - feat: Verify email with app 7 | - feat: Add app link for password reset 8 | 9 | 🐛 Bug Fixes 10 | 11 | - fix: Show correct title in Edit Profile section 12 | - fix: Improve system of pagination in Attendees list 13 | - fix: Prevent adding of duplicate items on check-in 14 | - fix: Prevent Tickets fragment from becoming blank 15 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/16.txt: -------------------------------------------------------------------------------- 1 | 🚀 Features and Enhancements 2 | - feat(ui): Add event name and time in dashboard 3 | - feat: Add 'About The App' section 4 | - feat: Add bio section in Edit Profile 5 | - feat: Option to delete profile picture 6 | 7 | 🐛 Bug Fixes 8 | - fix: Prevent app from closing while navigating back from Device Settings 9 | 10 | 🧰 Maintenance 11 | - chore: Improve Account section 12 | - chore: Improve navigation flow 13 | - chore: Show event end time in nav drawer 14 | - chore: Share event link and location also 15 | - chore: Simplify event sharing process 16 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/17.txt: -------------------------------------------------------------------------------- 1 | 2 | 🐛 Bug Fixes 3 | - Hide contact and bio fields in organizer details if null 4 | - Prevent event details from showing in nav drawer when no event is selected 5 | - Use correct values for tickets, sales and orders 6 | - Use correct policy links and change Cookie Policy to Refund Policy 7 | - Prevent Account section's action bar title from changing 8 | - Display user friendly error message for wrong credential 9 | - Use confirmed sessions instead of accepted session 10 | - Use confirmed speakers instead of accepted speakers 11 | 12 | 🧰 Maintenance 13 | - Rename Device Settings and Event Settings 14 | - Shift Event Creation and Publish features to Developer Mode 15 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Bug Fixes -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Various bug fixes and internal enhancements -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/9.txt: -------------------------------------------------------------------------------- 1 | Various bug fixes and internal enhancements -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | Eventyay Organizer App provides event management features like: 2 | 3 | - Event manager log in and sign up 4 | - Manual attendee check in 5 | - Attendee check in through QR code scan 6 | - Basic event analytics 7 | - Basic ticket management 8 | - Event Detail 9 | - Orders Detail 10 | - Organizer Detail -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/checkin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/checkin.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/create_ticket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/create_ticket.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/dashboard_one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/dashboard_one.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/dashboard_two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/dashboard_two.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/login.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/navigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/navigation.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/order_checkin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/order_checkin.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/organizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/images/phoneScreenshots/organizer.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Event management app for Organizers using Eventyay platform -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Eventyay Organizer App -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/video.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/fastlane/metadata/android/en-US/video.txt -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | android.enableJetifier=true 11 | android.useAndroidX=true 12 | 13 | # When configured, Gradle will run in incubating parallel mode. 14 | # This option should only be used with decoupled projects. More details, visit 15 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 16 | # org.gradle.parallel=true 17 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/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-5.6-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | 7 | -------------------------------------------------------------------------------- /scripts/.gitignore: -------------------------------------------------------------------------------- 1 | *.json 2 | *.jks 3 | -------------------------------------------------------------------------------- /scripts/prep-key.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | export DEPLOY_BRANCH=${DEPLOY_BRANCH:-development} 5 | export PUBLISH_BRANCH=${PUBLISH_BRANCH:-master} 6 | 7 | if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_REPO_SLUG" != "fossasia/open-event-organizer-android" ] || ! [ "$TRAVIS_BRANCH" == "$DEPLOY_BRANCH" -o "$TRAVIS_BRANCH" == "$PUBLISH_BRANCH" ]; then 8 | echo "We decrypt key only for pushes to the master branch and not PRs. So, skip." 9 | exit 0 10 | fi 11 | 12 | openssl aes-256-cbc -K $encrypted_4afa27b18f52_key -iv $encrypted_4afa27b18f52_iv -in ./scripts/secrets.tar.enc -out ./scripts/secrets.tar -d 13 | tar xvf ./scripts/secrets.tar -C scripts/ 14 | -------------------------------------------------------------------------------- /scripts/secrets.tar.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/open-event-organizer-android/04812b35c14141e0a788ebdc665cbf2d2dfbf0ed/scripts/secrets.tar.enc -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /versions.gradle: -------------------------------------------------------------------------------- 1 | ext.versions = [:] 2 | 3 | versions.compileSdk = 28 4 | versions.buildTools = '28.0.3' 5 | versions.minSdk = 21 6 | versions.targetSdk = 28 7 | 8 | //Libraries 9 | versions.dbflow = '4.1.2' 10 | versions.glide = '4.8.0' 11 | versions.retrofit = '2.3.0' 12 | versions.okhttp = '3.10.0' 13 | versions.butterknife = '10.1.0' 14 | versions.dagger = '2.21' 15 | versions.sentry_android = '1.3.0' 16 | versions.rxandroid = '2.1.1' 17 | versions.rxjava = '2.1.10' 18 | versions.stetho = '1.5.1' 19 | versions.stetho_no_op = '1.1' 20 | versions.roboelectric = '4.2' 21 | versions.threetenbp = '1.2.0' 22 | versions.mp_android_chart = 'v3.1.0' 23 | versions.lombok = '1.16.18' 24 | versions.timber = '4.7.1' 25 | versions.leak_canary = '2.0-alpha-1' 26 | versions.lifecycle = '2.2.0-alpha04' 27 | versions.support_lib = '28.0.0' 28 | versions.play_services='17.0.0' 29 | versions.play_services_vision='18.0.0' 30 | versions.places='1.1.0' 31 | versions.work_manager="1.0.1-rc01" 32 | versions.timelineView="1.0.6" 33 | versions.chromeCustomTabs='27.1.0' 34 | --------------------------------------------------------------------------------