├── .travis.yml ├── Design ├── About.jpg ├── Conference List (ListView).png ├── Conference List (Staggered ListView).jpg ├── Register.jpg ├── Schedule.jpg ├── Splash.jpg ├── Sponsors.jpg ├── Talk (Collapsed).jpg ├── Talk.jpg ├── Venue (API level less than 17).jpg └── Venue.jpg ├── LICENSE ├── README.md ├── conference-xml ├── conference1.xml ├── conference2.xml ├── conference3.xml ├── conference4.xml ├── conference5.xml ├── conference6.xml ├── conference7.xml └── index.xml ├── source-code ├── .gitignore ├── .idea │ ├── .name │ ├── compiler.xml │ ├── copyright │ │ └── profiles_settings.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── app │ ├── .gitignore │ ├── build.gradle │ ├── fabric.properties │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── org │ │ │ └── buildmlearn │ │ │ └── mconference │ │ │ └── ApplicationTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── sampleXML.xml │ │ ├── java │ │ │ └── org │ │ │ │ └── buildmlearn │ │ │ │ └── mconference │ │ │ │ ├── activity │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── Conference.java │ │ │ │ ├── Schedule.java │ │ │ │ ├── Splash.java │ │ │ │ └── Talk.java │ │ │ │ ├── adapters │ │ │ │ ├── DayRecyclerView.java │ │ │ │ ├── SponsorRecyclerView.java │ │ │ │ └── TabAdapter.java │ │ │ │ ├── conference │ │ │ │ ├── About.java │ │ │ │ ├── Register.java │ │ │ │ ├── Sponsor.java │ │ │ │ ├── Venue.java │ │ │ │ └── VenueMapView.java │ │ │ │ ├── constant │ │ │ │ └── Constants.java │ │ │ │ ├── database │ │ │ │ └── Database.java │ │ │ │ ├── model │ │ │ │ ├── SponsorDetails.java │ │ │ │ └── TalkDetails.java │ │ │ │ ├── schedule │ │ │ │ └── DayFragment.java │ │ │ │ ├── secondapproach │ │ │ │ ├── ConferenceMeta.java │ │ │ │ ├── Home.java │ │ │ │ ├── HomeRecyclerView.java │ │ │ │ └── IndexParser.java │ │ │ │ └── util │ │ │ │ ├── PlayServicesUnavailableDialogFragment.java │ │ │ │ └── XMLParser.java │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ └── ic_search_white_24dp.png │ │ │ ├── drawable-mdpi │ │ │ └── ic_search_white_24dp.png │ │ │ ├── drawable-xhdpi │ │ │ └── ic_search_white_24dp.png │ │ │ ├── drawable-xxhdpi │ │ │ └── ic_search_white_24dp.png │ │ │ ├── drawable-xxxhdpi │ │ │ └── ic_search_white_24dp.png │ │ │ ├── drawable │ │ │ ├── ic_ham.png │ │ │ ├── logo.png │ │ │ └── placeholder_1.jpg │ │ │ ├── layout │ │ │ ├── activity_base.xml │ │ │ ├── activity_conference.xml │ │ │ ├── activity_home.xml │ │ │ ├── activity_schedule.xml │ │ │ ├── activity_splash.xml │ │ │ ├── activity_talk.xml │ │ │ ├── fragment_about.xml │ │ │ ├── fragment_day.xml │ │ │ ├── fragment_register.xml │ │ │ ├── fragment_sponsor.xml │ │ │ ├── fragment_venue.xml │ │ │ ├── home_card_view.xml │ │ │ ├── nav_header.xml │ │ │ ├── schedule_card_view.xml │ │ │ ├── sponsor_card_view.xml │ │ │ └── talk_content_scrolling.xml │ │ │ ├── menu │ │ │ ├── home_menu.xml │ │ │ ├── nav_menu.xml │ │ │ └── schedule_menu.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ │ └── values │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── org │ │ └── buildmlearn │ │ └── mconference │ │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle └── web page ├── css ├── jquery.timepicker.css └── materialize.min.css ├── fonts └── roboto │ ├── Roboto-Bold.eot │ ├── Roboto-Bold.ttf │ ├── Roboto-Bold.woff │ ├── Roboto-Bold.woff2 │ ├── Roboto-Light.eot │ ├── Roboto-Light.ttf │ ├── Roboto-Light.woff │ ├── Roboto-Light.woff2 │ ├── Roboto-Medium.eot │ ├── Roboto-Medium.ttf │ ├── Roboto-Medium.woff │ ├── Roboto-Medium.woff2 │ ├── Roboto-Regular.eot │ ├── Roboto-Regular.ttf │ ├── Roboto-Regular.woff │ ├── Roboto-Regular.woff2 │ ├── Roboto-Thin.eot │ ├── Roboto-Thin.ttf │ ├── Roboto-Thin.woff │ └── Roboto-Thin.woff2 ├── index.html └── js ├── XMLCreater.js ├── XMLWriter.js ├── custom.js ├── jquery-2.1.1.min.js ├── jquery.timepicker.min.js └── materialize.min.js /.travis.yml: -------------------------------------------------------------------------------- 1 | before_install: cd source-code 2 | 3 | language: android 4 | 5 | jdk: 6 | - oraclejdk7 7 | 8 | android: 9 | components: 10 | # Uncomment the lines below if you want to 11 | # use the latest revision of Android SDK Tools 12 | - tools 13 | - platform-tools 14 | - android-23 15 | - build-tools-23.0.2 16 | - extra-android-m2repository 17 | - extra-android-support 18 | - extra-google-m2repository 19 | 20 | script: 21 | - chmod +x ./gradlew -------------------------------------------------------------------------------- /Design/About.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/About.jpg -------------------------------------------------------------------------------- /Design/Conference List (ListView).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Conference List (ListView).png -------------------------------------------------------------------------------- /Design/Conference List (Staggered ListView).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Conference List (Staggered ListView).jpg -------------------------------------------------------------------------------- /Design/Register.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Register.jpg -------------------------------------------------------------------------------- /Design/Schedule.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Schedule.jpg -------------------------------------------------------------------------------- /Design/Splash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Splash.jpg -------------------------------------------------------------------------------- /Design/Sponsors.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Sponsors.jpg -------------------------------------------------------------------------------- /Design/Talk (Collapsed).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Talk (Collapsed).jpg -------------------------------------------------------------------------------- /Design/Talk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Talk.jpg -------------------------------------------------------------------------------- /Design/Venue (API level less than 17).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Venue (API level less than 17).jpg -------------------------------------------------------------------------------- /Design/Venue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/Design/Venue.jpg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, BuildmLearn.org 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of mConference-Framework nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/BuildmLearn/mConference-Framework.svg?branch=master)](https://travis-ci.org/BuildmLearn/mConference-Framework) 2 | 3 | # mConference-Framework 4 | mConference Framework is an Android Framework which allows organizers to create apps for conferences and events. Using this framework, the organizers can create apps for any event, conference or meetup by creating and adding data in the configuration file (XML) from a static webpage. -------------------------------------------------------------------------------- /conference-xml/conference1.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #1 3 | http://www.example.com/logo.png 4 | The Centre Point, Jamshedpur 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/conference2.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #2 3 | http://www.example.com/logo.png 4 | Indian Habitat Centre, Delhi 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/conference3.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #3 3 | http://www.example.com/logo.png 4 | Blue Diamond, Kolkata 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/conference4.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference Name 3 | http://www.example.com/logo.png 4 | IIM Ahemdabad 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/conference5.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #5 3 | http://www.example.com/logo.png 4 | BITS Pilani 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/conference6.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #6 3 | http://www.example.com/logo.png 4 | Hyderabad 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/conference7.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #7 3 | http://www.example.com/logo.png 4 | Kengiri, Bangalore 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /conference-xml/index.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference #1 3 | 1472668200000 4 | The Centre Point, Jamshedpur 5 | https://c402277.ssl.cf1.rackcdn.com/photos/9031/images/original/WWF_25mm_no_tab.png 6 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference1.xml 7 | 8 | 9 | Conference #2 10 | 1472841000000 11 | Indian Habitat Centre, Delhi 12 | http://www.kloover.com/wp-content/uploads/2008/09/detail_google_vertical-225x300.jpg 13 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference2.xml 14 | 15 | 16 | Conference #3 17 | 1473273000000 18 | Blue Diamond, Kolkata 19 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 20 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference3.xml 21 | 22 | 23 | Conference #4 24 | 1473273000000 25 | IIM Ahemdabad 26 | http://blogs-images.forbes.com/georgeanders/files/2013/01/225x30011.jpg 27 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference4.xml 28 | 29 | 30 | Conference #5 31 | 1473273000000 32 | BITS Pilani 33 | http://management.ind.in/img/j/MPH-in-BITS-Pilani-1.jpg 34 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference5.xml 35 | 36 | 37 | Conference #6 38 | 1473273000000 39 | Hyderabad 40 | http://i1-news.softpedia-static.com/images/news2/Goodbye-openSUSE-11-2-2.jpg 41 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference6.xml 42 | 43 | 44 | Conference #7 45 | 1473373000000 46 | Kengiri, Bangalore 47 | https://d18lkz4dllo6v2.cloudfront.net/cumulus_uploads/entry/2014-08-08/Wikipedia%20PIC.png?w=660 48 | https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/conference7.xml 49 | -------------------------------------------------------------------------------- /source-code/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /source-code/.idea/.name: -------------------------------------------------------------------------------- 1 | source-code -------------------------------------------------------------------------------- /source-code/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /source-code/.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /source-code/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /source-code/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 24 | 25 | -------------------------------------------------------------------------------- /source-code/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | -------------------------------------------------------------------------------- /source-code/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /source-code/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /source-code/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /source-code/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /source-code/app/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | maven { url 'https://maven.fabric.io/public' } 4 | } 5 | 6 | dependencies { 7 | classpath 'io.fabric.tools:gradle:1.+' 8 | } 9 | } 10 | 11 | repositories { 12 | maven { url 'https://maven.fabric.io/public' } 13 | } 14 | 15 | apply plugin: 'com.android.application' 16 | apply plugin: 'io.fabric' 17 | 18 | android { 19 | compileSdkVersion 23 20 | buildToolsVersion '23.0.2' 21 | 22 | defaultConfig { 23 | applicationId "org.buildmlearn.mconference" 24 | minSdkVersion 15 25 | targetSdkVersion 23 26 | versionCode 1 27 | versionName "1.0" 28 | multiDexEnabled true 29 | } 30 | 31 | dexOptions { 32 | javaMaxHeapSize "4g" //specify the heap size for the dex process 33 | preDexLibraries = false //delete the already predexed libraries 34 | } 35 | 36 | buildTypes { 37 | release { 38 | minifyEnabled false 39 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 40 | } 41 | } 42 | } 43 | 44 | dependencies { 45 | compile fileTree(include: ['*.jar'], dir: 'libs') 46 | testCompile 'junit:junit:4.12' 47 | compile 'com.android.support:appcompat-v7:23.1.1' 48 | compile 'com.android.support:support-v4:23.1.1' 49 | compile 'com.android.support:cardview-v7:23.1.1' 50 | compile 'com.android.support:recyclerview-v7:23.1.1' 51 | compile 'com.android.support:palette-v7:23.1.1' 52 | compile 'com.android.support:design:23.1.1' 53 | compile 'com.google.android.gms:play-services-maps:9.0.1' 54 | compile 'com.google.android.gms:play-services-location:9.0.1' 55 | compile 'com.squareup.picasso:picasso:2.5.2' 56 | compile 'com.android.support:multidex:1.0.1' 57 | compile('com.crashlytics.sdk.android:crashlytics:2.5.7@aar') { 58 | transitive = true; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /source-code/app/fabric.properties: -------------------------------------------------------------------------------- 1 | #Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public. 2 | #Thu Jun 16 15:38:25 IST 2016 3 | apiSecret=a1381c4fc6306b571c39920523f93fdb82a7974fc6add05a69b22238c7e019f3 4 | -------------------------------------------------------------------------------- /source-code/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/jai/Android/Sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /source-code/app/src/androidTest/java/org/buildmlearn/mconference/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /source-code/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 16 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 36 | 37 | 41 | 44 | 45 | 48 | 51 | 52 | 53 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /source-code/app/src/main/assets/sampleXML.xml: -------------------------------------------------------------------------------- 1 | 2 | Conference Name 3 | http://www.example.com/logo.png 4 | Indian Habitat Centre, Delhi 5 | 9 | http://www.example.com/background.jpg 10 | https://cdn-az.allevents.in/banners/9c4e10fe8efaf771cca752ecd1ff0138 11 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12 | https://www.google.com/forms 13 | 14 | 15 | Sponsor #1 16 | https://mir-s3-cdn-cf.behance.net/project_modules/disp/3fe6027858667.55e61091bc63d.jpg 17 | 18 | 19 | Sponsor #2 20 | https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSJqpA4Kx0817SYkXx4eZKRTOKXBjZOhHIc4mIkevic2qyaqvco 21 | 22 | 23 | Sponsor #3 24 | https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png 25 | 26 | 27 | 28 | 29 | Talk #1 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 31 | 1472704200000 32 | 1472707800000 33 | Albert Hall 34 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 35 | 36 | 37 | Talk #2 38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 39 | 1472715000000 40 | 1472718600000 41 | Nehru Hall 42 | http://www.example.com/talk2.jpg 43 | 44 | 45 | Talk #3 46 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 47 | 1472722200000 48 | 1472729400000 49 | Gandhi Hall 50 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 51 | 52 | 53 | Talk #1 54 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 55 | 1472790600000 56 | 1472794200000 57 | Albert Hall 58 | http://www.example.com/talk2.jpg 59 | 60 | 61 | Talk #2 62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 63 | 1472801400000 64 | 1472805000000 65 | Nehru Hall 66 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 67 | 68 | 69 | Talk #3 70 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 71 | 1472808600000 72 | 1472815800000 73 | Gandhi Hall 74 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 75 | 76 | 77 | Talk #1 78 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 79 | 1472877000000 80 | 1472880600000 81 | Albert Hall 82 | http://static.dnaindia.com/sites/default/files/styles/half/public/2016/01/12/413826-swami.jpg 83 | 84 | 85 | Talk #2 86 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 87 | 1472887800000 88 | 1472819400000 89 | Nehru Hall 90 | http://www.example.com/talk2.jpg 91 | 92 | 93 | Talk #3 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 95 | 1472895000000 96 | 1472902200000 97 | Gandhi Hall 98 | http://blogs.gartner.com/smarterwithgartner/files/2015/03/Guy_Kawasaki_1_inline.jpg 99 | 100 | 101 |
-------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/activity/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.activity; 2 | 3 | import android.app.TaskStackBuilder; 4 | import android.content.Intent; 5 | import android.os.Build; 6 | import android.os.Handler; 7 | import android.support.v4.view.GravityCompat; 8 | import android.content.res.Configuration; 9 | import android.support.design.widget.NavigationView; 10 | import android.support.v4.widget.DrawerLayout; 11 | import android.support.v7.app.ActionBarDrawerToggle; 12 | import android.support.v7.app.AppCompatActivity; 13 | import android.os.Bundle; 14 | import android.support.v7.widget.Toolbar; 15 | import android.view.MenuItem; 16 | import android.view.View; 17 | import android.widget.FrameLayout; 18 | import android.widget.ImageView; 19 | 20 | import com.squareup.picasso.Picasso; 21 | 22 | import org.buildmlearn.mconference.R; 23 | 24 | public class BaseActivity extends AppCompatActivity { 25 | 26 | public DrawerLayout drawerLayout; 27 | public NavigationView navigationView; 28 | public FrameLayout frameLayout; 29 | public Toolbar toolbar; 30 | private ImageView navImage; 31 | private ActionBarDrawerToggle drawerToggle; 32 | 33 | @Override 34 | protected void onCreate(Bundle savedInstanceState) { 35 | super.onCreate(savedInstanceState); 36 | setContentView(R.layout.activity_base); 37 | 38 | drawerLayout = (DrawerLayout) findViewById(R.id.nav_drawer_layout); 39 | navigationView = (NavigationView) findViewById(R.id.nav_view); 40 | frameLayout = (FrameLayout) findViewById(R.id.nav_content_frame); 41 | navImage = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.nav_header_image); 42 | } 43 | 44 | protected void setUpNavDrawer(Toolbar toolbar) { 45 | 46 | Picasso.with(this) 47 | .load(R.drawable.placeholder_1) 48 | .error(R.drawable.placeholder_1) 49 | .fit().centerCrop().into(navImage); 50 | 51 | drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, 0, 0) 52 | { 53 | public void onDrawerOpened(View v) { 54 | super.onDrawerOpened(v); 55 | invalidateOptionsMenu(); 56 | } 57 | 58 | public void onDrawerClosed(View v) { 59 | super.onDrawerClosed(v); 60 | invalidateOptionsMenu(); 61 | } 62 | }; 63 | 64 | drawerToggle.setDrawerIndicatorEnabled(true); 65 | drawerLayout.setDrawerListener(drawerToggle); 66 | 67 | getSupportActionBar().setHomeButtonEnabled(true); 68 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 69 | getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_ham); 70 | 71 | navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 72 | @Override 73 | public boolean onNavigationItemSelected(final MenuItem item) { 74 | 75 | if (item.getItemId() == getSelfNavDrawerItem()) { 76 | drawerLayout.closeDrawer(GravityCompat.START); 77 | return true; 78 | } 79 | 80 | new Handler().postDelayed(new Runnable() { 81 | @Override 82 | public void run() { 83 | goToNavDrawerItem(item.getItemId()); 84 | } 85 | }, 250); 86 | 87 | View mainContent = findViewById(R.id.nav_content_frame); 88 | mainContent.animate().alpha(0).setDuration(150); 89 | 90 | drawerLayout.closeDrawer(GravityCompat.START); 91 | 92 | return true; 93 | } 94 | }); 95 | } 96 | 97 | @Override 98 | protected void onPostCreate(Bundle savedInstanceState) { 99 | super.onPostCreate(savedInstanceState); 100 | drawerToggle.syncState(); 101 | 102 | View mainContent = findViewById(R.id.nav_content_frame); 103 | mainContent.animate().alpha(1).setDuration(250); 104 | } 105 | 106 | @Override 107 | public void onConfigurationChanged(Configuration newConfig) { 108 | super.onConfigurationChanged(newConfig); 109 | drawerToggle.onConfigurationChanged(newConfig); 110 | } 111 | 112 | @Override 113 | public boolean onOptionsItemSelected(MenuItem item) { 114 | return super.onOptionsItemSelected(item); 115 | } 116 | 117 | @Override 118 | public void onBackPressed() { 119 | if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 120 | drawerLayout.closeDrawer(GravityCompat.START); 121 | } else { 122 | super.onBackPressed(); 123 | } 124 | } 125 | 126 | private void goToNavDrawerItem(int item) { 127 | Intent i = null; 128 | 129 | switch (item) { 130 | case R.id.nav_home: 131 | i = new Intent(getBaseContext(), Conference.class); 132 | break; 133 | 134 | case R.id.nav_schedule: 135 | i = new Intent(getBaseContext(), Schedule.class); 136 | break; 137 | } 138 | 139 | if(i != null) 140 | createBackStack(i); 141 | } 142 | 143 | private void createBackStack(Intent intent) { 144 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 145 | TaskStackBuilder builder = TaskStackBuilder.create(this); 146 | builder.addNextIntentWithParentStack(intent); 147 | builder.startActivities(); 148 | } 149 | else { 150 | startActivity(intent); 151 | finish(); 152 | } 153 | } 154 | 155 | protected int getSelfNavDrawerItem(){ 156 | return -1; 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/activity/Conference.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.activity; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.os.AsyncTask; 6 | import android.os.Bundle; 7 | import android.support.design.widget.TabLayout; 8 | import android.support.v4.view.ViewPager; 9 | import android.support.v7.widget.Toolbar; 10 | import android.view.View; 11 | import android.widget.ProgressBar; 12 | 13 | import org.buildmlearn.mconference.R; 14 | import org.buildmlearn.mconference.adapters.TabAdapter; 15 | import org.buildmlearn.mconference.conference.About; 16 | import org.buildmlearn.mconference.conference.Venue; 17 | import org.buildmlearn.mconference.conference.Register; 18 | import org.buildmlearn.mconference.conference.Sponsor; 19 | import org.buildmlearn.mconference.constant.Constants; 20 | import org.buildmlearn.mconference.util.XMLParser; 21 | 22 | import java.io.IOException; 23 | import java.net.URL; 24 | 25 | public class Conference extends BaseActivity implements Constants { 26 | 27 | private ViewPager viewPager; 28 | private TabLayout tabLayout; 29 | private ProgressBar bar; 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | getLayoutInflater().inflate(R.layout.activity_conference, frameLayout); 35 | 36 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 37 | setSupportActionBar(toolbar); 38 | 39 | super.setUpNavDrawer(toolbar); 40 | 41 | viewPager = (ViewPager) findViewById(R.id.viewpager); 42 | viewPager.setOffscreenPageLimit(3); 43 | 44 | tabLayout = (TabLayout) findViewById(R.id.tabs); 45 | 46 | navigationView.getMenu().getItem(0).setChecked(true); 47 | overridePendingTransition(0,0); 48 | 49 | URL url = null; 50 | if (SECOND_APPROACH) { 51 | Intent i = getIntent(); 52 | try { 53 | url = new URL(i.getStringExtra("URL")); 54 | } catch (IOException e) { 55 | e.printStackTrace(); 56 | } 57 | } 58 | 59 | bar = (ProgressBar) this.findViewById(R.id.progressBar_conference); 60 | 61 | populateConference task = new populateConference(this); 62 | task.execute(url); 63 | } 64 | 65 | @Override 66 | protected int getSelfNavDrawerItem() { 67 | return R.id.nav_home; 68 | } 69 | 70 | private void setupViewPager(ViewPager viewPager) { 71 | TabAdapter adapter = new TabAdapter(getSupportFragmentManager()); 72 | adapter.addFragment(new About(), "About"); 73 | adapter.addFragment(new Venue(), "Venue"); 74 | adapter.addFragment(new Register(), "Register"); 75 | adapter.addFragment(new Sponsor(), "Sponsors"); 76 | viewPager.setAdapter(adapter); 77 | } 78 | 79 | 80 | private class populateConference extends AsyncTask { 81 | 82 | private Context mContext; 83 | public populateConference (Context context){ 84 | mContext = context; 85 | } 86 | 87 | @Override 88 | protected void onPreExecute(){ 89 | bar.setVisibility(View.VISIBLE); 90 | } 91 | 92 | @Override 93 | protected Void doInBackground(URL... urls) { 94 | if (SECOND_APPROACH) { 95 | try { 96 | XMLParser.parse(mContext, urls[0]); 97 | } catch (Exception e) { 98 | e.printStackTrace(); 99 | } 100 | } 101 | return null; 102 | } 103 | 104 | @Override 105 | protected void onPostExecute(Void aVoid) { 106 | bar.setVisibility(View.GONE); 107 | setupViewPager(viewPager); 108 | tabLayout.setupWithViewPager(viewPager); 109 | } 110 | } 111 | 112 | @Override 113 | public void onBackPressed() { 114 | if (!SECOND_APPROACH) 115 | System.exit(1); 116 | 117 | super.onBackPressed(); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/activity/Schedule.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.activity; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.support.design.widget.TabLayout; 6 | import android.support.v4.view.ViewPager; 7 | import android.os.Bundle; 8 | import android.support.v7.widget.Toolbar; 9 | 10 | import org.buildmlearn.mconference.R; 11 | import org.buildmlearn.mconference.adapters.TabAdapter; 12 | import org.buildmlearn.mconference.constant.Constants; 13 | import org.buildmlearn.mconference.schedule.DayFragment; 14 | 15 | public class Schedule extends BaseActivity implements Constants { 16 | 17 | private int noOfDays; 18 | long startTime; 19 | long endTime; 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | getLayoutInflater().inflate(R.layout.activity_schedule, frameLayout); 25 | 26 | SharedPreferences sharedPref 27 | = getApplicationContext().getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE); 28 | startTime = sharedPref.getLong(START_TAG, 0); 29 | endTime = sharedPref.getLong(END_TAG, 0); 30 | 31 | noOfDays = getNoOfDays(endTime - startTime) + 1; 32 | 33 | Toolbar toolbar = (Toolbar) findViewById(R.id.schedule_toolbar); 34 | setSupportActionBar(toolbar); 35 | 36 | super.setUpNavDrawer(toolbar); 37 | 38 | ViewPager viewPager = (ViewPager) findViewById(R.id.schedule_viewpager); 39 | setupViewPager(viewPager); 40 | 41 | TabLayout tabLayout = (TabLayout) findViewById(R.id.schedule_tabs); 42 | tabLayout.setupWithViewPager(viewPager); 43 | 44 | navigationView.getMenu().getItem(1).setChecked(true); 45 | overridePendingTransition(0,0); 46 | } 47 | 48 | @Override 49 | protected int getSelfNavDrawerItem() { 50 | return R.id.nav_schedule; 51 | } 52 | 53 | private void setupViewPager(ViewPager viewPager) { 54 | TabAdapter adapter = new TabAdapter(getSupportFragmentManager()); 55 | 56 | for(int i=1; i<=noOfDays; i++) 57 | adapter.addFragment(newDayFragmentInstance(i), "Day " + i); 58 | viewPager.setAdapter(adapter); 59 | } 60 | 61 | private int getNoOfDays(long milli) { 62 | return (int)(milli / milliInOneDay); 63 | } 64 | 65 | private DayFragment newDayFragmentInstance(int day){ 66 | DayFragment dayFragment = new DayFragment(); 67 | Bundle args = new Bundle(); 68 | long startDayMilli = startTime + (day - 1) * milliInOneDay; 69 | args.putLong(DAY_KEY, startDayMilli); 70 | dayFragment.setArguments(args); 71 | 72 | return dayFragment; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/activity/Splash.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.activity; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.SharedPreferences; 7 | import android.os.Bundle; 8 | import android.os.Handler; 9 | 10 | import com.crashlytics.android.Crashlytics; 11 | 12 | import io.fabric.sdk.android.Fabric; 13 | 14 | import org.buildmlearn.mconference.R; 15 | import org.buildmlearn.mconference.constant.Constants; 16 | import org.buildmlearn.mconference.secondapproach.Home; 17 | import org.buildmlearn.mconference.util.XMLParser; 18 | 19 | public class Splash extends Activity implements Constants { 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | Fabric.with(this, new Crashlytics()); 25 | setContentView(R.layout.activity_splash); 26 | 27 | final SharedPreferences sharedPref 28 | = getApplicationContext().getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE); 29 | 30 | new Handler().postDelayed(new Runnable() { 31 | 32 | @Override 33 | public void run() { 34 | Intent i; 35 | if (SECOND_APPROACH) 36 | i = new Intent(Splash.this, Home.class); 37 | 38 | else 39 | i = new Intent(Splash.this, Conference.class); 40 | 41 | startActivity(i); 42 | finish(); 43 | } 44 | }, SPLASH_TIME_OUT); 45 | 46 | if (!SECOND_APPROACH) { 47 | new Thread(new Runnable() { 48 | @Override 49 | public void run() { 50 | try { 51 | if (!sharedPref.getBoolean(PARSING_COMPLETE, false)) 52 | XMLParser.parse(getApplicationContext(), null); 53 | } catch (Exception e) { 54 | e.printStackTrace(); 55 | } 56 | } 57 | }).start(); 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/activity/Talk.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.activity; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Bitmap; 5 | import android.graphics.PorterDuff; 6 | import android.graphics.drawable.BitmapDrawable; 7 | import android.graphics.drawable.Drawable; 8 | import android.net.Uri; 9 | import android.provider.CalendarContract; 10 | import android.support.design.widget.CollapsingToolbarLayout; 11 | import android.support.design.widget.FloatingActionButton; 12 | import android.support.v4.content.ContextCompat; 13 | import android.support.v7.app.AppCompatActivity; 14 | import android.os.Bundle; 15 | import android.support.v7.graphics.Palette; 16 | import android.support.v7.widget.Toolbar; 17 | import android.util.Log; 18 | import android.view.View; 19 | import android.widget.ImageView; 20 | import android.widget.TextView; 21 | 22 | import com.squareup.picasso.Picasso; 23 | 24 | import org.buildmlearn.mconference.R; 25 | import org.buildmlearn.mconference.model.TalkDetails; 26 | 27 | import java.text.SimpleDateFormat; 28 | 29 | public class Talk extends AppCompatActivity { 30 | 31 | private CollapsingToolbarLayout collapsingToolbarLayout; 32 | 33 | @Override 34 | protected void onCreate(Bundle savedInstanceState) { 35 | super.onCreate(savedInstanceState); 36 | setContentView(R.layout.activity_talk); 37 | 38 | Toolbar toolbar = (Toolbar) findViewById(R.id.talk_toolbar); 39 | setSupportActionBar(toolbar); 40 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 41 | 42 | final TalkDetails talkDetails = (TalkDetails)getIntent().getSerializableExtra("TalkDetails"); 43 | final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha); 44 | upArrow.setColorFilter(ContextCompat.getColor(this, android.R.color.white), PorterDuff.Mode.SRC_ATOP); 45 | getSupportActionBar().setDisplayShowTitleEnabled(true); 46 | getSupportActionBar().setHomeAsUpIndicator(upArrow); 47 | 48 | collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.talk_toolbar_layout); 49 | collapsingToolbarLayout.setTitle(talkDetails.getName()); 50 | collapsingToolbarLayout.setExpandedTitleColor(ContextCompat.getColor(this, android.R.color.white)); 51 | collapsingToolbarLayout.setCollapsedTitleTextColor(ContextCompat.getColor(this, android.R.color.white)); 52 | 53 | final ImageView talkImage = (ImageView) findViewById(R.id.talk_collapsible_image); 54 | TextView talkTime = (TextView) findViewById(R.id.talk_time_detail); 55 | TextView talkLocation = (TextView) findViewById(R.id.talk_venue_detail); 56 | TextView talkDesc = (TextView) findViewById(R.id.talk_desc_detail); 57 | 58 | SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm a"); 59 | String talkTimeText = dateFormat.format(talkDetails.getStartTime()) 60 | + " - " + dateFormat.format(talkDetails.getEndTime()); 61 | talkTime.setText(talkTimeText); 62 | 63 | talkLocation.setText(talkDetails.getLocation()); 64 | talkDesc.setText(talkDetails.getDesc()); 65 | 66 | Picasso.with(this) 67 | .load(Uri.parse(talkDetails.getImageURL())) 68 | .error(R.drawable.placeholder_1) 69 | .fit().centerCrop().into(talkImage, new com.squareup.picasso.Callback() { 70 | @Override 71 | public void onSuccess() { 72 | applyPalette(talkImage); 73 | } 74 | 75 | @Override 76 | public void onError() { 77 | Log.d("Talk.java", "Error caused by Picasso"); 78 | applyPalette(talkImage); 79 | } 80 | }); 81 | 82 | FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.talk_reminder); 83 | fab.setOnClickListener(new View.OnClickListener() { 84 | @Override 85 | public void onClick(View v) { 86 | Intent intent = new Intent(Intent.ACTION_EDIT); 87 | intent.setType("vnd.android.cursor.item/event"); 88 | intent.putExtra(CalendarContract.Events.TITLE, 89 | talkDetails.getName()); 90 | intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, 91 | talkDetails.getStartTime().getTime()); 92 | intent.putExtra(CalendarContract.Events.EVENT_LOCATION, 93 | talkDetails.getLocation()); 94 | intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, 95 | talkDetails.getEndTime().getTime()); 96 | intent.putExtra(CalendarContract.Events.ALL_DAY, false); 97 | intent.putExtra(CalendarContract.Events.DESCRIPTION, 98 | talkDetails.getShortDesc()); 99 | v.getContext().startActivity(intent); 100 | } 101 | }); 102 | } 103 | 104 | private void applyPalette(ImageView img) { 105 | 106 | Bitmap bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap(); 107 | Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { 108 | @Override 109 | public void onGenerated(Palette palette) { 110 | 111 | int primary = ContextCompat.getColor(getBaseContext(), R.color.colorPrimary); 112 | int primaryDark = ContextCompat.getColor(getBaseContext(), R.color.colorPrimaryDark); 113 | 114 | collapsingToolbarLayout.setContentScrimColor(palette.getMutedColor(primary)); 115 | collapsingToolbarLayout.setStatusBarScrimColor(palette.getMutedColor(primaryDark)); 116 | } 117 | }); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/adapters/DayRecyclerView.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.adapters; 2 | 3 | import android.content.Intent; 4 | import android.net.Uri; 5 | import android.provider.CalendarContract; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.Button; 11 | import android.widget.ImageView; 12 | import android.widget.TextView; 13 | 14 | import com.squareup.picasso.Picasso; 15 | 16 | import org.buildmlearn.mconference.R; 17 | import org.buildmlearn.mconference.activity.Talk; 18 | import org.buildmlearn.mconference.model.TalkDetails; 19 | 20 | import java.text.SimpleDateFormat; 21 | import java.util.ArrayList; 22 | 23 | /** 24 | * Created by jai on 4/6/16. 25 | */ 26 | public class DayRecyclerView extends RecyclerView.Adapter { 27 | 28 | private ArrayList talks; 29 | 30 | public static class TalkDetailsObject extends RecyclerView.ViewHolder { 31 | 32 | public TextView talkName; 33 | public ImageView talkImage; 34 | public TextView talkTime; 35 | public TextView talkLocation; 36 | public TextView talkShortDesc; 37 | public Button reminder; 38 | public Button readMore; 39 | 40 | public TalkDetailsObject(View view) { 41 | super(view); 42 | talkName = (TextView) view.findViewById(R.id.talk_name); 43 | talkImage= (ImageView) view.findViewById(R.id.talk_image); 44 | talkTime = (TextView) view.findViewById(R.id.talk_time); 45 | talkLocation = (TextView) view.findViewById(R.id.talk_location); 46 | talkShortDesc = (TextView) view.findViewById(R.id.talk_desc_short); 47 | reminder = (Button) view.findViewById(R.id.reminder); 48 | readMore = (Button) view.findViewById(R.id.read_more); 49 | } 50 | } 51 | 52 | public DayRecyclerView(ArrayList talks) { 53 | this.talks = talks; 54 | } 55 | 56 | @Override 57 | public TalkDetailsObject onCreateViewHolder(ViewGroup parent, int viewType) { 58 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.schedule_card_view, parent, false); 59 | 60 | TalkDetailsObject talkDetailsObject = new TalkDetailsObject(view); 61 | return talkDetailsObject; 62 | } 63 | 64 | @Override 65 | public void onBindViewHolder(final TalkDetailsObject holder, final int position) { 66 | Picasso.with(holder.talkImage.getContext()) 67 | .load(Uri.parse(talks.get(position).getImageURL())) 68 | .error(R.drawable.placeholder_1) 69 | .fit().centerCrop().into(holder.talkImage); 70 | holder.talkName.setText(talks.get(position).getName()); 71 | 72 | SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm a"); 73 | String talkTimeText = dateFormat.format(talks.get(position).getStartTime()) 74 | + " - " + dateFormat.format(talks.get(position).getEndTime()); 75 | holder.talkTime.setText(talkTimeText); 76 | 77 | holder.talkLocation.setText(talks.get(position).getLocation()); 78 | holder.talkShortDesc.setText(talks.get(position).getShortDesc()); 79 | 80 | holder.reminder.setOnClickListener(new View.OnClickListener() { 81 | @Override 82 | public void onClick(View v) { 83 | Intent intent = new Intent(Intent.ACTION_EDIT); 84 | intent.setType("vnd.android.cursor.item/event"); 85 | intent.putExtra(CalendarContract.Events.TITLE, 86 | talks.get(position).getName()); 87 | intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, 88 | talks.get(position).getStartTime().getTime()); 89 | intent.putExtra(CalendarContract.Events.EVENT_LOCATION, 90 | talks.get(position).getLocation()); 91 | intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, 92 | talks.get(position).getEndTime().getTime()); 93 | intent.putExtra(CalendarContract.Events.ALL_DAY, false); 94 | intent.putExtra(CalendarContract.Events.DESCRIPTION, 95 | talks.get(position).getShortDesc()); 96 | v.getContext().startActivity(intent); 97 | } 98 | }); 99 | 100 | holder.readMore.setOnClickListener(new View.OnClickListener() { 101 | @Override 102 | public void onClick(View v) { 103 | Intent i = new Intent(v.getContext(), Talk.class); 104 | i.putExtra("TalkDetails", talks.get(position)); 105 | v.getContext().startActivity(i); 106 | } 107 | }); 108 | } 109 | 110 | @Override 111 | public int getItemCount() { 112 | return talks.size(); 113 | } 114 | 115 | public void setFilter(ArrayList talksList) { 116 | talks = new ArrayList<>(); 117 | talks.addAll(talksList); 118 | notifyDataSetChanged(); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/adapters/SponsorRecyclerView.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.adapters; 2 | 3 | import android.net.Uri; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | 11 | import com.squareup.picasso.Picasso; 12 | 13 | import org.buildmlearn.mconference.R; 14 | import org.buildmlearn.mconference.model.SponsorDetails; 15 | 16 | import java.util.ArrayList; 17 | 18 | /** 19 | * Created by jai on 3/6/16. 20 | */ 21 | public class SponsorRecyclerView extends RecyclerView.Adapter { 22 | 23 | private ArrayList sponsors; 24 | 25 | public static class SponsorDetailsObject extends RecyclerView.ViewHolder { 26 | public TextView sponsorName; 27 | public ImageView sponsorImage; 28 | 29 | public SponsorDetailsObject(View view) { 30 | super(view); 31 | sponsorName = (TextView) view.findViewById(R.id.sponsor_name); 32 | sponsorImage = (ImageView) view.findViewById(R.id.sponsor_img); 33 | } 34 | } 35 | 36 | public SponsorRecyclerView(ArrayList sponsors) { 37 | this.sponsors = sponsors; 38 | } 39 | 40 | @Override 41 | public SponsorDetailsObject onCreateViewHolder(ViewGroup parent, int viewType) { 42 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sponsor_card_view, parent, false); 43 | 44 | SponsorDetailsObject sponsorDetailsObject = new SponsorDetailsObject(view); 45 | return sponsorDetailsObject; 46 | } 47 | 48 | @Override 49 | public void onBindViewHolder(SponsorDetailsObject holder, int position) { 50 | holder.sponsorName.setText(sponsors.get(position).getName()); 51 | Picasso.with(holder.sponsorImage.getContext()) 52 | .load(Uri.parse(sponsors.get(position).getLogoURL())) 53 | .fit().centerInside().into(holder.sponsorImage); 54 | } 55 | 56 | @Override 57 | public int getItemCount() { 58 | return sponsors.size(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/adapters/TabAdapter.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.adapters; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | /** 11 | * Created by jai on 31/5/16. 12 | */ 13 | public class TabAdapter extends FragmentPagerAdapter { 14 | private final List mFragmentList = new ArrayList<>(); 15 | private final List mFragmentTitleList = new ArrayList<>(); 16 | 17 | public TabAdapter(FragmentManager manager) { 18 | super(manager); 19 | } 20 | 21 | @Override 22 | public Fragment getItem(int position) { 23 | return mFragmentList.get(position); 24 | } 25 | 26 | @Override 27 | public int getCount() { 28 | return mFragmentList.size(); 29 | } 30 | 31 | public void addFragment(Fragment fragment, String title) { 32 | mFragmentList.add(fragment); 33 | mFragmentTitleList.add(title); 34 | } 35 | 36 | @Override 37 | public CharSequence getPageTitle(int position) { 38 | return mFragmentTitleList.get(position); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/conference/About.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.conference; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.net.Uri; 6 | import android.os.Bundle; 7 | import android.support.v4.app.Fragment; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.ImageView; 12 | import android.widget.TextView; 13 | 14 | import com.squareup.picasso.Picasso; 15 | 16 | import org.buildmlearn.mconference.R; 17 | import org.buildmlearn.mconference.constant.Constants; 18 | 19 | public class About extends Fragment implements Constants { 20 | 21 | @Override 22 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 23 | Bundle savedInstanceState) { 24 | 25 | // Inflate the layout for this fragment 26 | View view = inflater.inflate(R.layout.fragment_about, container, false); 27 | 28 | SharedPreferences sharedPref 29 | = getActivity().getApplicationContext().getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE); 30 | 31 | TextView name = (TextView) view.findViewById(R.id.conference_name); 32 | ImageView aboutImg = (ImageView) view.findViewById(R.id.about_image); 33 | TextView desc = (TextView) view.findViewById(R.id.conference_desc); 34 | 35 | String conferenceName = sharedPref.getString(NAME_TAG, null); 36 | String aboutImgURL = sharedPref.getString(ABOUTBG_TAG, null); 37 | String conferenceDesc = sharedPref.getString(DETAILS_TAG, null); 38 | 39 | getActivity().setTitle(conferenceName); 40 | 41 | name.setText(conferenceName); 42 | Picasso.with(view.getContext()) 43 | .load(Uri.parse(aboutImgURL)) 44 | .placeholder(R.drawable.placeholder_1) 45 | .error(R.drawable.placeholder_1) 46 | .fit().centerCrop().into(aboutImg); 47 | desc.setText(conferenceDesc); 48 | 49 | return view; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/conference/Register.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.conference; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.graphics.Bitmap; 6 | import android.os.Bundle; 7 | import android.support.v4.app.Fragment; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.webkit.WebView; 12 | import android.widget.ProgressBar; 13 | 14 | import org.buildmlearn.mconference.R; 15 | import org.buildmlearn.mconference.constant.Constants; 16 | 17 | public class Register extends Fragment implements Constants { 18 | 19 | private ProgressBar pbar; 20 | 21 | @Override 22 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 23 | Bundle savedInstanceState) { 24 | super.onCreate(savedInstanceState); 25 | View view = inflater.inflate(R.layout.fragment_register, container, false); 26 | 27 | SharedPreferences sharedPref 28 | = getActivity().getApplicationContext().getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE); 29 | 30 | WebView webview = (WebView)view.findViewById(R.id.web); 31 | pbar = (ProgressBar)view.findViewById(R.id.loading); 32 | pbar.setVisibility(View.GONE); 33 | webview.setWebViewClient(new WebViewClient()); 34 | webview.getSettings().setJavaScriptEnabled(true); 35 | 36 | String registerURL = sharedPref.getString(REGLINK_TAG, null); 37 | webview.loadUrl(registerURL); 38 | 39 | return view; 40 | } 41 | 42 | public class WebViewClient extends android.webkit.WebViewClient 43 | { 44 | @Override 45 | public void onPageStarted(WebView view, String url, Bitmap favicon) { 46 | super.onPageStarted(view, url, favicon); 47 | pbar.setVisibility(View.VISIBLE); 48 | pbar.setProgress(0); 49 | } 50 | 51 | @Override 52 | public boolean shouldOverrideUrlLoading(WebView view, String url) { 53 | view.loadUrl(url); 54 | return true; 55 | } 56 | @Override 57 | public void onPageFinished(WebView view, String url) { 58 | super.onPageFinished(view, url); 59 | pbar.setVisibility(View.GONE); 60 | pbar.setProgress(100); 61 | } 62 | 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/conference/Sponsor.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.conference; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v7.widget.LinearLayoutManager; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | 11 | import org.buildmlearn.mconference.R; 12 | import org.buildmlearn.mconference.adapters.SponsorRecyclerView; 13 | import org.buildmlearn.mconference.constant.Constants; 14 | import org.buildmlearn.mconference.database.Database; 15 | import org.buildmlearn.mconference.model.SponsorDetails; 16 | 17 | import java.util.ArrayList; 18 | 19 | public class Sponsor extends Fragment implements Constants { 20 | 21 | @Override 22 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 23 | Bundle savedInstanceState) { 24 | // Inflate the layout for this fragment 25 | View view = inflater.inflate(R.layout.fragment_sponsor, container, false); 26 | 27 | // boolean webPageprovided = false; 28 | 29 | RecyclerView sponsorRecyclerView = (RecyclerView) view.findViewById(R.id.sponsor_recycler_view); 30 | sponsorRecyclerView.setHasFixedSize(true); 31 | sponsorRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 32 | 33 | Database db = new Database(view.getContext()); 34 | ArrayList sponsors = db.getSponsors(); 35 | 36 | SponsorRecyclerView sponsorAdapter = new SponsorRecyclerView(sponsors); 37 | sponsorRecyclerView.setAdapter(sponsorAdapter); 38 | 39 | return view; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/conference/Venue.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.conference; 2 | 3 | import android.app.DialogFragment; 4 | import android.content.Context; 5 | import android.content.SharedPreferences; 6 | import android.location.Address; 7 | import android.location.Geocoder; 8 | import android.os.AsyncTask; 9 | import android.os.Bundle; 10 | import android.support.v4.app.Fragment; 11 | import android.view.LayoutInflater; 12 | import android.view.View; 13 | import android.view.ViewGroup; 14 | import android.widget.ScrollView; 15 | import android.widget.TextView; 16 | 17 | import com.google.android.gms.common.ConnectionResult; 18 | import com.google.android.gms.common.GooglePlayServicesUtil; 19 | import com.google.android.gms.maps.CameraUpdateFactory; 20 | import com.google.android.gms.maps.GoogleMap; 21 | import com.google.android.gms.maps.MapsInitializer; 22 | import com.google.android.gms.maps.model.BitmapDescriptorFactory; 23 | import com.google.android.gms.maps.model.CameraPosition; 24 | import com.google.android.gms.maps.model.LatLng; 25 | import com.google.android.gms.maps.model.MarkerOptions; 26 | 27 | import org.buildmlearn.mconference.R; 28 | import org.buildmlearn.mconference.constant.Constants; 29 | import org.buildmlearn.mconference.util.PlayServicesUnavailableDialogFragment; 30 | 31 | import java.io.IOException; 32 | import java.util.Locale; 33 | 34 | public class Venue extends Fragment implements Constants { 35 | 36 | private VenueMapView mMapView; 37 | GoogleMap googleMap; 38 | ScrollView scrollView; 39 | SharedPreferences sharedPref; 40 | String venueAddress; 41 | int status; 42 | 43 | @Override 44 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 45 | Bundle savedInstanceState) { 46 | 47 | View v = inflater.inflate(R.layout.fragment_venue, container, 48 | false); 49 | MapsInitializer.initialize(getActivity().getApplicationContext()); 50 | scrollView = (ScrollView) v.findViewById(R.id.venue_scrollview); 51 | mMapView = (VenueMapView) v.findViewById(R.id.mapView); 52 | TextView address = (TextView) v.findViewById(R.id.venue_detail); 53 | 54 | sharedPref = getActivity().getApplicationContext() 55 | .getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE); 56 | venueAddress = sharedPref.getString(VENUE_TAG, null); 57 | address.setText(venueAddress); 58 | mMapView.onCreate(savedInstanceState); 59 | 60 | mMapView.onResume();// needed to get the map to display immediately 61 | 62 | status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity().getApplicationContext()); 63 | 64 | googleMap = mMapView.getMap(); 65 | 66 | new MapPlotting().execute(); 67 | 68 | return v; 69 | } 70 | 71 | @Override 72 | public void onResume() { 73 | super.onResume(); 74 | mMapView.onResume(); 75 | } 76 | 77 | @Override 78 | public void onPause() { 79 | super.onPause(); 80 | mMapView.onPause(); 81 | } 82 | 83 | @Override 84 | public void onDestroy() { 85 | super.onDestroy(); 86 | mMapView.onDestroy(); 87 | } 88 | 89 | @Override 90 | public void onLowMemory() { 91 | super.onLowMemory(); 92 | mMapView.onLowMemory(); 93 | } 94 | 95 | private class MapPlotting extends AsyncTask { 96 | 97 | double latitude, longitude; 98 | 99 | @Override 100 | protected Void doInBackground(Void... params) { 101 | latitude = Double.longBitsToDouble(sharedPref.getLong(LAT, 0)); 102 | longitude = Double.longBitsToDouble(sharedPref.getLong(LONG, 0)); 103 | 104 | Address returnedAddress; 105 | 106 | if (latitude == 0 && longitude == 0 || SECOND_APPROACH) { 107 | returnedAddress = getAddressFromLocation(getContext(), venueAddress); 108 | SharedPreferences.Editor editor = sharedPref.edit(); 109 | 110 | if (returnedAddress != null) { 111 | editor.putLong(LAT, Double.doubleToLongBits(returnedAddress.getLatitude())); 112 | editor.putLong(LONG, Double.doubleToLongBits(returnedAddress.getLongitude())); 113 | editor.apply(); 114 | 115 | latitude = returnedAddress.getLatitude(); 116 | longitude = returnedAddress.getLongitude(); 117 | } 118 | } 119 | return null; 120 | } 121 | 122 | @Override 123 | protected void onPostExecute(Void aVoid) { 124 | if (status == ConnectionResult.SUCCESS) { 125 | // create marker 126 | MarkerOptions marker = new MarkerOptions().position( 127 | new LatLng(latitude, longitude)).title(venueAddress); 128 | 129 | // Changing marker icon 130 | marker.icon(BitmapDescriptorFactory 131 | .defaultMarker(BitmapDescriptorFactory.HUE_ROSE)); 132 | 133 | // adding marker 134 | googleMap.addMarker(marker); 135 | CameraPosition cameraPosition = new CameraPosition.Builder() 136 | .target(new LatLng(latitude, longitude)).zoom(12).build(); 137 | googleMap.animateCamera(CameraUpdateFactory 138 | .newCameraPosition(cameraPosition)); 139 | } else { 140 | DialogFragment dialogFragment = new PlayServicesUnavailableDialogFragment(); 141 | dialogFragment.show(getActivity().getFragmentManager(), "Play Service Problem"); 142 | } 143 | } 144 | 145 | private Address getAddressFromLocation (Context context, String locationAddress) { 146 | Address address = null; 147 | Geocoder geocoder = new Geocoder(context, Locale.getDefault()); 148 | try { 149 | address = geocoder.getFromLocationName(locationAddress, 1).get(0); 150 | } catch (IOException e) { 151 | e.printStackTrace(); 152 | } 153 | 154 | return address; 155 | } 156 | } 157 | } -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/conference/VenueMapView.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.conference; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.MotionEvent; 6 | 7 | import com.google.android.gms.maps.MapView; 8 | 9 | /** 10 | * Created by jai on 22/6/16. 11 | */ 12 | 13 | public class VenueMapView extends MapView { 14 | 15 | public VenueMapView(Context context) { 16 | super(context); 17 | } 18 | 19 | public VenueMapView(Context context, AttributeSet attributeSet) { 20 | super(context, attributeSet); 21 | } 22 | 23 | public VenueMapView(Context context, AttributeSet attributeSet, int i) { 24 | super(context, attributeSet, i); 25 | } 26 | 27 | @Override 28 | public boolean dispatchTouchEvent(MotionEvent ev) { 29 | switch (ev.getAction()){ 30 | case MotionEvent.ACTION_DOWN: 31 | this.getParent().requestDisallowInterceptTouchEvent(true); 32 | break; 33 | 34 | case MotionEvent.ACTION_UP: 35 | this.getParent().requestDisallowInterceptTouchEvent(false); 36 | break; 37 | } 38 | 39 | super.dispatchTouchEvent(ev); 40 | return true; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/constant/Constants.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.constant; 2 | 3 | /** 4 | * Created by jai on 18/6/16. 5 | */ 6 | public interface Constants { 7 | 8 | boolean SECOND_APPROACH = true; //false for 1st approach 9 | 10 | int SPLASH_TIME_OUT = 3000; 11 | 12 | String PREFERENCES_FILE_NAME = "PREFS"; 13 | 14 | String PARSING_COMPLETE = "parsing complete"; 15 | 16 | long milliInOneDay = 86400000l; 17 | 18 | String INDEX_FILE_URL = "https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/2nd-approach/conference-xml/index.xml"; 19 | 20 | String DAY_KEY = "day"; 21 | 22 | String NAME_TAG = "name"; 23 | String LOGO_TAG = "logo"; 24 | String VENUE_TAG = "venue"; 25 | String TIME_TAG = "time"; 26 | String START_TAG = "start"; 27 | String END_TAG = "end"; 28 | String SPLASHBG_TAG = "splashbg"; 29 | String TYPE_ATTR = "type"; 30 | String ABOUTBG_TAG = "aboutbg"; 31 | String DETAILS_TAG = "details"; 32 | String REGLINK_TAG = "reglink"; 33 | String SPONSORS_TAG = "sponsors"; 34 | String ITEM_TAG = "item"; 35 | String DESC_TAG = "desc"; 36 | String IMAGE_TAG = "image"; 37 | String TALKS_TAG = "talks"; 38 | String CONFERENCE_TAG = "conference"; 39 | String CONFIG_URL_TAG = "config"; 40 | 41 | String TYPE_ATTR_INDIV = "individual"; 42 | 43 | //Constants for local Database 44 | 45 | int DATABASE_VERSION = 1; 46 | String DATABASE_NAME = "mConference.db"; 47 | String TABLE_SPONSORS = "sponsors"; 48 | String TABLE_TALKS = "talks"; 49 | 50 | String COLUMN_NAME = "name"; 51 | String COLUMN_LOCATION = "location"; 52 | String COLUMN_START = "start"; 53 | String COLUMN_END = "end"; 54 | String COLUMN_DESC = "desc"; 55 | String COLUMN_URL = "url"; 56 | String COLUMN_FAVORITE = "favorite"; 57 | 58 | String CREATE_TALKS_TABLE = "CREATE TABLE IF NOT EXISTS " + 59 | TABLE_TALKS + "(" 60 | + COLUMN_NAME + " TEXT, " + COLUMN_URL + " TEXT, " 61 | + COLUMN_START + " DATETIME, " + COLUMN_END + " DATETIME, " 62 | + COLUMN_LOCATION + " TEXT, " + COLUMN_FAVORITE + " INTEGER, " 63 | + COLUMN_DESC + " TEXT)"; 64 | 65 | String CREATE_SPONSORS_TABLE = "CREATE TABLE IF NOT EXISTS " + 66 | TABLE_SPONSORS + "(" 67 | + COLUMN_NAME + " TEXT, " + COLUMN_URL + " TEXT)"; 68 | 69 | String GET_SPONSORS_QUERY = "SELECT * FROM " + TABLE_SPONSORS; 70 | String GET_TALKS_QUERY = "SELECT * FROM " + TABLE_TALKS + " WHERE " + COLUMN_START + " BETWEEN "; 71 | String GET_FAV_TALKS_QUERY = "SELECT * FROM " + TABLE_TALKS + " WHERE " + COLUMN_FAVORITE + "=1"; 72 | 73 | String LAT = "latitude"; 74 | String LONG = "lomgitude"; 75 | 76 | } 77 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/database/Database.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.database; 2 | 3 | import android.content.ContentValues; 4 | import android.content.Context; 5 | import android.database.Cursor; 6 | import android.database.sqlite.SQLiteDatabase; 7 | import android.database.sqlite.SQLiteOpenHelper; 8 | 9 | import org.buildmlearn.mconference.constant.Constants; 10 | import org.buildmlearn.mconference.model.SponsorDetails; 11 | import org.buildmlearn.mconference.model.TalkDetails; 12 | 13 | import java.util.ArrayList; 14 | import java.util.Date; 15 | 16 | /** 17 | * Created by jai on 19/6/16. 18 | */ 19 | public class Database extends SQLiteOpenHelper implements Constants { 20 | 21 | public Database(Context context) { 22 | super(context, DATABASE_NAME, null, DATABASE_VERSION); 23 | } 24 | 25 | @Override 26 | public void onCreate(SQLiteDatabase db) { 27 | db.execSQL(CREATE_TALKS_TABLE); 28 | db.execSQL(CREATE_SPONSORS_TABLE); 29 | } 30 | 31 | @Override 32 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 33 | db.execSQL("DROP TABLE IF EXISTS " + TABLE_TALKS); 34 | db.execSQL("DROP TABLE IF EXISTS " + TABLE_SPONSORS); 35 | onCreate(db); 36 | } 37 | 38 | public void addSponsor(ArrayList sponsors) { 39 | SQLiteDatabase db = this.getWritableDatabase(); 40 | 41 | for (SponsorDetails sponsor : sponsors) { 42 | ContentValues values = new ContentValues(); 43 | values.put(COLUMN_NAME, sponsor.getName()); 44 | values.put(COLUMN_URL, sponsor.getLogoURL()); 45 | db.insert(TABLE_SPONSORS, null, values); 46 | } 47 | 48 | db.close(); 49 | } 50 | 51 | public void addTalks(ArrayList talks) { 52 | SQLiteDatabase db = this.getWritableDatabase(); 53 | 54 | for (TalkDetails talk : talks) { 55 | ContentValues values = new ContentValues(); 56 | values.put(COLUMN_NAME, talk.getName()); 57 | values.put(COLUMN_URL, talk.getImageURL()); 58 | values.put(COLUMN_START, talk.getStartTime().getTime()); 59 | values.put(COLUMN_END, talk.getEndTime().getTime()); 60 | values.put(COLUMN_LOCATION, talk.getLocation()); 61 | values.put(COLUMN_DESC, talk.getDesc()); 62 | 63 | db.insert(TABLE_TALKS, null, values); 64 | } 65 | 66 | db.close(); 67 | } 68 | 69 | public ArrayList getSponsors() { 70 | SQLiteDatabase db = this.getReadableDatabase(); 71 | ArrayList sponsors = new ArrayList<>(); 72 | 73 | Cursor cursor = db.rawQuery(GET_SPONSORS_QUERY, null); 74 | 75 | if (cursor.moveToFirst()) { 76 | do { 77 | SponsorDetails result = new SponsorDetails(); 78 | result.setName(cursor.getString(cursor.getColumnIndex(COLUMN_NAME))); 79 | result.setLogoURL(cursor.getString(cursor.getColumnIndex(COLUMN_URL))); 80 | 81 | sponsors.add(result); 82 | } while (cursor.moveToNext()); 83 | } 84 | 85 | cursor.close(); 86 | db.close(); 87 | return sponsors; 88 | } 89 | 90 | public ArrayList getTalks(long startDayMilli){ 91 | SQLiteDatabase db = this.getReadableDatabase(); 92 | ArrayList talks = new ArrayList<>(); 93 | long endDayMilli = startDayMilli + milliInOneDay; 94 | 95 | Cursor cursor = db.rawQuery(GET_TALKS_QUERY + startDayMilli + " AND " + endDayMilli, null); 96 | 97 | if (cursor.moveToFirst()) { 98 | do { 99 | TalkDetails result = new TalkDetails(); 100 | result.setName(cursor.getString(cursor.getColumnIndex(COLUMN_NAME))); 101 | result.setImageURL(cursor.getString(cursor.getColumnIndex(COLUMN_URL))); 102 | result.setLocation(cursor.getString(cursor.getColumnIndex(COLUMN_LOCATION))); 103 | result.setStartTime(new Date(cursor.getLong(cursor.getColumnIndex(COLUMN_START)))); 104 | result.setEndTime(new Date(cursor.getLong(cursor.getColumnIndex(COLUMN_END)))); 105 | result.setDesc(cursor.getString(cursor.getColumnIndex(COLUMN_DESC))); 106 | 107 | talks.add(result); 108 | } while (cursor.moveToNext()); 109 | } 110 | 111 | cursor.close(); 112 | db.close(); 113 | return talks; 114 | } 115 | 116 | public ArrayList getFavTalks(){ 117 | SQLiteDatabase db = this.getReadableDatabase(); 118 | ArrayList talks = new ArrayList<>(); 119 | 120 | Cursor cursor = db.rawQuery(GET_FAV_TALKS_QUERY, null); 121 | 122 | if (cursor.moveToFirst()) { 123 | do { 124 | TalkDetails result = new TalkDetails(); 125 | result.setName(cursor.getString(cursor.getColumnIndex(COLUMN_NAME))); 126 | result.setImageURL(cursor.getString(cursor.getColumnIndex(COLUMN_URL))); 127 | result.setLocation(cursor.getString(cursor.getColumnIndex(COLUMN_LOCATION))); 128 | result.setStartTime(new Date(cursor.getLong(cursor.getColumnIndex(COLUMN_START)))); 129 | result.setEndTime(new Date(cursor.getLong(cursor.getColumnIndex(COLUMN_END)))); 130 | result.setDesc(cursor.getString(cursor.getColumnIndex(COLUMN_DESC))); 131 | 132 | talks.add(result); 133 | } while (cursor.moveToNext()); 134 | } 135 | 136 | cursor.close(); 137 | db.close(); 138 | return talks; 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/model/SponsorDetails.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.model; 2 | 3 | /** 4 | * Created by jai on 2/6/16. 5 | */ 6 | public class SponsorDetails { 7 | private String name; 8 | private String logoURL; 9 | 10 | public SponsorDetails() { 11 | this.name = null; 12 | this.logoURL = null; 13 | } 14 | 15 | public SponsorDetails(String name, String logoURL) { 16 | this.name = name; 17 | this.logoURL = logoURL; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public String getLogoURL() { 25 | return logoURL; 26 | } 27 | 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | 32 | public void setLogoURL(String logoURL) { 33 | this.logoURL = logoURL; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/model/TalkDetails.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.model; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | 6 | /** 7 | * Created by jai on 4/6/16. 8 | */ 9 | public class TalkDetails implements Serializable{ 10 | private String name; 11 | private String imageURL; 12 | private Date startTime; 13 | private Date endTime; 14 | private String location; 15 | private String desc; 16 | private String shortDesc; 17 | private boolean isFavroite; 18 | 19 | public TalkDetails () { 20 | this.name = null; 21 | this.imageURL = null; 22 | this.startTime = null; 23 | this.endTime = null; 24 | this.location = null; 25 | this.desc = null; 26 | this.shortDesc = null; 27 | this.isFavroite = false; 28 | } 29 | 30 | public TalkDetails(String name, String imageURL, Date startTime, Date endTime, String location, String desc) { 31 | this.name = name; 32 | this.imageURL = imageURL; 33 | this.startTime = startTime; 34 | this.endTime = endTime; 35 | this.location = location; 36 | this.desc = desc; 37 | this.isFavroite = false; 38 | setShortDesc(); 39 | } 40 | 41 | public String getName() { 42 | return name; 43 | } 44 | 45 | public String getImageURL() { 46 | return imageURL; 47 | } 48 | 49 | public void setImageURL(String imageURL) { 50 | this.imageURL = imageURL; 51 | } 52 | 53 | public void setName(String name) { 54 | this.name = name; 55 | } 56 | 57 | public Date getStartTime() { 58 | return startTime; 59 | } 60 | 61 | public void setStartTime(Date startTime) { 62 | this.startTime = startTime; 63 | } 64 | 65 | public Date getEndTime() { 66 | return endTime; 67 | } 68 | 69 | public void setEndTime(Date endTime) { 70 | this.endTime = endTime; 71 | } 72 | 73 | public String getLocation() { 74 | return location; 75 | } 76 | 77 | public void setLocation(String location) { 78 | this.location = location; 79 | } 80 | 81 | public String getDesc() { 82 | return desc; 83 | } 84 | 85 | public void setDesc(String desc) { 86 | this.desc = desc; 87 | setShortDesc(); 88 | } 89 | 90 | public boolean isFavroite() { 91 | return isFavroite; 92 | } 93 | 94 | public void setBookmarked(boolean favroite) { 95 | isFavroite = favroite; 96 | } 97 | 98 | public String getShortDesc() { 99 | return shortDesc; 100 | } 101 | 102 | public void setShortDesc() { 103 | String[] splitDesc = desc.split(" ", 7); 104 | shortDesc = ""; 105 | 106 | for (int i=0; i<6 && i talks; 30 | private DayRecyclerView dayAdapter; 31 | RecyclerView dayRecyclerView; 32 | long startDayMilli; 33 | 34 | @Override 35 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 36 | Bundle savedInstanceState) { 37 | 38 | setHasOptionsMenu(true); 39 | // Inflate the layout for this fragment 40 | final View view = inflater.inflate(R.layout.fragment_day, container, false); 41 | dayRecyclerView = (RecyclerView) view.findViewById(R.id.day_recycler_view); 42 | dayRecyclerView.setHasFixedSize(true); 43 | dayRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 44 | 45 | Bundle args = this.getArguments(); 46 | startDayMilli = args.getLong(DAY_KEY); 47 | 48 | new populateFragment().execute(view.getContext()); 49 | return view; 50 | } 51 | 52 | @Override 53 | public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 54 | inflater.inflate(R.menu.schedule_menu, menu); 55 | 56 | MenuItem item = menu.findItem(R.id.schedule_search); 57 | SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 58 | searchView.setOnQueryTextListener(this); 59 | 60 | 61 | MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() { 62 | @Override 63 | public boolean onMenuItemActionExpand(MenuItem item) { 64 | return true; 65 | } 66 | 67 | @Override 68 | public boolean onMenuItemActionCollapse(MenuItem item) { 69 | dayAdapter.setFilter(talks); 70 | return true; 71 | } 72 | }); 73 | } 74 | 75 | @Override 76 | public boolean onQueryTextChange(String query) { 77 | ArrayList filterList = filter(talks, query.toLowerCase()); 78 | dayAdapter.setFilter(filterList); 79 | return true; 80 | } 81 | 82 | @Override 83 | public boolean onQueryTextSubmit(String query) { 84 | return false; 85 | } 86 | 87 | private ArrayList filter(ArrayList talks, String query) { 88 | 89 | ArrayList filteredList = new ArrayList<>(); 90 | for (TalkDetails talkDetails:talks) { 91 | String name = talkDetails.getName().toLowerCase(); 92 | String location = talkDetails.getLocation().toLowerCase(); 93 | String desc = talkDetails.getDesc().toLowerCase(); 94 | 95 | if (name.contains(query) || location.contains(query) || desc.contains(query)) 96 | filteredList.add(talkDetails); 97 | } 98 | 99 | return filteredList; 100 | } 101 | 102 | private class populateFragment extends AsyncTask { 103 | 104 | protected Void doInBackground(Context... contexts) { 105 | Database db = new Database(contexts[0]); 106 | talks = db.getTalks(startDayMilli); 107 | return null; 108 | } 109 | 110 | @Override 111 | 112 | protected void onPostExecute(Void aVoid) { 113 | dayAdapter = new DayRecyclerView(talks); 114 | dayRecyclerView.setAdapter(dayAdapter); 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/secondapproach/ConferenceMeta.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.secondapproach; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Created by jai on 16/7/16. 7 | */ 8 | 9 | public class ConferenceMeta { 10 | private String name; 11 | private Date date; 12 | private String venue; 13 | private String logoURL; 14 | private String configURL; 15 | private boolean isFavroite; 16 | 17 | public ConferenceMeta() { 18 | this.name = null; 19 | this.date = null; 20 | this.venue = null; 21 | this.logoURL = null; 22 | this.configURL = null; 23 | this.isFavroite = false; 24 | } 25 | 26 | public String getName() { 27 | return name; 28 | } 29 | 30 | public void setName(String name) { 31 | this.name = name; 32 | } 33 | 34 | public Date getDate() { 35 | return date; 36 | } 37 | 38 | public void setDate(Date date) { 39 | this.date = date; 40 | } 41 | 42 | public String getVenue() { 43 | return venue; 44 | } 45 | 46 | public void setVenue(String venue) { 47 | this.venue = venue; 48 | } 49 | 50 | public String getLogoURL() { 51 | return logoURL; 52 | } 53 | 54 | public void setLogoURL(String logoURL) { 55 | this.logoURL = logoURL; 56 | } 57 | 58 | public String getConfigURL() { 59 | return configURL; 60 | } 61 | 62 | public void setConfigURL(String configURL) { 63 | this.configURL = configURL; 64 | } 65 | 66 | public boolean isFavroite() { 67 | return isFavroite; 68 | } 69 | 70 | public void setFavroite(boolean favroite) { 71 | isFavroite = favroite; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/secondapproach/Home.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.secondapproach; 2 | 3 | import android.os.AsyncTask; 4 | import android.support.v4.view.MenuItemCompat; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.support.v7.widget.RecyclerView; 8 | import android.support.v7.widget.SearchView; 9 | import android.support.v7.widget.StaggeredGridLayoutManager; 10 | import android.support.v7.widget.Toolbar; 11 | import android.view.Menu; 12 | import android.view.MenuInflater; 13 | import android.view.MenuItem; 14 | import android.view.View; 15 | import android.widget.ProgressBar; 16 | 17 | import org.buildmlearn.mconference.R; 18 | import org.buildmlearn.mconference.constant.Constants; 19 | 20 | import java.util.ArrayList; 21 | 22 | public class Home extends AppCompatActivity implements SearchView.OnQueryTextListener, Constants{ 23 | 24 | private ArrayList conferences; 25 | private HomeRecyclerView homeAdapter; 26 | RecyclerView homeRecyclerView; 27 | private ProgressBar bar; 28 | 29 | @Override 30 | protected void onCreate(Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | setContentView(R.layout.activity_home); 33 | 34 | Toolbar toolbar = (Toolbar) findViewById(R.id.home_toolbar); 35 | setSupportActionBar(toolbar); 36 | 37 | bar = (ProgressBar) this.findViewById(R.id.progressBar_home); 38 | 39 | new populateActivity().execute(); 40 | } 41 | 42 | @Override 43 | public boolean onCreateOptionsMenu(Menu menu) { 44 | MenuInflater inflater = getMenuInflater(); 45 | inflater.inflate(R.menu.schedule_menu, menu); 46 | 47 | MenuItem item = menu.findItem(R.id.schedule_search); 48 | SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 49 | searchView.setOnQueryTextListener(this); 50 | 51 | MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() { 52 | @Override 53 | public boolean onMenuItemActionExpand(MenuItem item) { 54 | return true; 55 | } 56 | 57 | @Override 58 | public boolean onMenuItemActionCollapse(MenuItem item) { 59 | homeAdapter.setFilter(conferences); 60 | return true; 61 | } 62 | }); 63 | 64 | return true; 65 | } 66 | 67 | @Override 68 | public boolean onQueryTextChange(String query) { 69 | ArrayList filterList = filter(conferences, query.toLowerCase()); 70 | homeAdapter.setFilter(filterList); 71 | return true; 72 | } 73 | 74 | @Override 75 | public boolean onQueryTextSubmit(String query) { 76 | return false; 77 | } 78 | 79 | private ArrayList filter(ArrayList conferences, String query) { 80 | 81 | ArrayList filteredList = new ArrayList<>(); 82 | for (ConferenceMeta conferenceMeta:conferences) { 83 | String name = conferenceMeta.getName().toLowerCase(); 84 | String location = conferenceMeta.getVenue().toLowerCase(); 85 | 86 | if (name.contains(query) || location.contains(query)) 87 | filteredList.add(conferenceMeta); 88 | } 89 | 90 | return filteredList; 91 | } 92 | 93 | private class populateActivity extends AsyncTask { 94 | 95 | @Override 96 | protected void onPreExecute(){ 97 | bar.setVisibility(View.VISIBLE); 98 | } 99 | 100 | @Override 101 | protected Void doInBackground(Void... voids) { 102 | try { 103 | conferences = IndexParser.parseIndex(); 104 | } catch (Exception e) { 105 | e.printStackTrace(); 106 | } 107 | return null; 108 | } 109 | 110 | @Override 111 | protected void onPostExecute(Void aVoid) { 112 | bar.setVisibility(View.GONE); 113 | homeRecyclerView = (RecyclerView) findViewById(R.id.home_recycler_view); 114 | homeRecyclerView.setHasFixedSize(true); 115 | homeRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,1)); 116 | homeAdapter = new HomeRecyclerView(conferences); 117 | homeRecyclerView.setAdapter(homeAdapter); 118 | } 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/secondapproach/HomeRecyclerView.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.secondapproach; 2 | 3 | import android.content.Intent; 4 | import android.net.Uri; 5 | import android.support.v7.widget.CardView; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.util.Log; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.ImageView; 12 | import android.widget.TextView; 13 | 14 | import com.squareup.picasso.Picasso; 15 | 16 | import org.buildmlearn.mconference.R; 17 | import org.buildmlearn.mconference.activity.Conference; 18 | 19 | import java.text.SimpleDateFormat; 20 | import java.util.ArrayList; 21 | 22 | /** 23 | * Created by jai on 16/7/16. 24 | */ 25 | 26 | public class HomeRecyclerView extends RecyclerView.Adapter { 27 | private ArrayList conferences; 28 | 29 | public static class ConferenceMetaObject extends RecyclerView.ViewHolder { 30 | public CardView conferenceCardView; 31 | public ImageView conferenceImage; 32 | public TextView conferenceName; 33 | public TextView conferenceDate; 34 | public TextView conferenceVenue; 35 | 36 | public ConferenceMetaObject(View view) { 37 | super(view); 38 | conferenceCardView = (CardView) view.findViewById(R.id.home_card_view); 39 | conferenceImage = (ImageView) view.findViewById(R.id.conference_card_img); 40 | conferenceName = (TextView) view.findViewById(R.id.conference_card_name); 41 | conferenceDate = (TextView) view.findViewById(R.id.conference_card_date); 42 | conferenceVenue = (TextView) view.findViewById(R.id.conference_card_venue); 43 | } 44 | } 45 | 46 | public HomeRecyclerView(ArrayList conferences) { 47 | this.conferences = conferences; 48 | } 49 | 50 | @Override 51 | public ConferenceMetaObject onCreateViewHolder(ViewGroup parent, int viewType) { 52 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.home_card_view, parent, false); 53 | 54 | ConferenceMetaObject conferenceMetaObject = new ConferenceMetaObject(view); 55 | return conferenceMetaObject; 56 | } 57 | 58 | @Override 59 | public void onBindViewHolder(ConferenceMetaObject holder, final int position) { 60 | Log.d("URL", conferences.get(position).getLogoURL()); 61 | Picasso.with(holder.conferenceImage.getContext()) 62 | .load(Uri.parse(conferences.get(position).getLogoURL())) 63 | .error(R.drawable.placeholder_1) 64 | .into(holder.conferenceImage); 65 | holder.conferenceName.setText(conferences.get(position).getName()); 66 | 67 | SimpleDateFormat dateFormat = new SimpleDateFormat("d MMM''yy"); 68 | String conferenceDateText = dateFormat.format(conferences.get(position).getDate()); 69 | holder.conferenceDate.setText(conferenceDateText); 70 | 71 | holder.conferenceVenue.setText(conferences.get(position).getVenue()); 72 | 73 | holder.conferenceCardView.setOnClickListener(new View.OnClickListener() { 74 | @Override 75 | public void onClick(View v) { 76 | Intent i = new Intent(v.getContext(), Conference.class); 77 | i.putExtra("URL", conferences.get(position).getConfigURL()); 78 | v.getContext().startActivity(i); 79 | } 80 | }); 81 | 82 | } 83 | 84 | @Override 85 | public int getItemCount() { 86 | return conferences.size(); 87 | } 88 | 89 | public void setFilter(ArrayList confList) { 90 | conferences = new ArrayList<>(); 91 | conferences.addAll(confList); 92 | notifyDataSetChanged(); 93 | } 94 | } -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/secondapproach/IndexParser.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.secondapproach; 2 | 3 | import android.util.Log; 4 | 5 | import org.buildmlearn.mconference.constant.Constants; 6 | import org.xmlpull.v1.XmlPullParser; 7 | import org.xmlpull.v1.XmlPullParserException; 8 | import org.xmlpull.v1.XmlPullParserFactory; 9 | 10 | import java.io.BufferedInputStream; 11 | import java.io.IOException; 12 | import java.io.InputStream; 13 | import java.net.HttpURLConnection; 14 | import java.net.URL; 15 | import java.util.ArrayList; 16 | import java.util.Date; 17 | 18 | /** 19 | * Created by jai on 20/7/16. 20 | */ 21 | 22 | public class IndexParser implements Constants{ 23 | static XmlPullParserFactory pullParserFactory; 24 | static ArrayList conferences; 25 | 26 | public static ArrayList parseIndex() throws XmlPullParserException, IOException { 27 | 28 | conferences = new ArrayList<>(); 29 | 30 | pullParserFactory = XmlPullParserFactory.newInstance(); 31 | XmlPullParser parser = pullParserFactory.newPullParser(); 32 | parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 33 | 34 | Log.d("Parse", "parse"); 35 | URL url = new URL(INDEX_FILE_URL); 36 | HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 37 | InputStream inputStream = null; 38 | 39 | try { 40 | inputStream = new BufferedInputStream(urlConnection.getInputStream()); 41 | parser.setInput(inputStream, null); 42 | readIndex(parser); 43 | } finally { 44 | urlConnection.disconnect(); 45 | inputStream.close(); 46 | } 47 | 48 | return conferences; 49 | } 50 | 51 | private static void readIndex(XmlPullParser parser) throws XmlPullParserException, IOException { 52 | int event = parser.getEventType(); 53 | 54 | while (event != XmlPullParser.END_DOCUMENT) { 55 | String name = parser.getName(); 56 | 57 | switch (event) { 58 | case XmlPullParser.START_TAG: 59 | if (name.equals(CONFERENCE_TAG)) 60 | conferences.add(readConferenceItem(parser)); 61 | break; 62 | } 63 | event = parser.next(); 64 | } 65 | } 66 | 67 | private static ConferenceMeta readConferenceItem(XmlPullParser parser) throws XmlPullParserException, IOException { 68 | parser.require(XmlPullParser.START_TAG, null, CONFERENCE_TAG); 69 | ConferenceMeta conference = new ConferenceMeta(); 70 | 71 | while (parser.next() != XmlPullParser.END_TAG) { 72 | if (parser.getEventType() != XmlPullParser.START_TAG) 73 | continue; 74 | 75 | String name = parser.getName(); 76 | 77 | if (name.equals(NAME_TAG)) 78 | conference.setName(readText(parser)); 79 | else if (name.equals(START_TAG)) 80 | conference.setDate(new Date(Long.parseLong(readText(parser)))); 81 | else if (name.equals(VENUE_TAG)) 82 | conference.setVenue(readText(parser)); 83 | else if (name.equals(IMAGE_TAG)) 84 | conference.setLogoURL(readText(parser)); 85 | else if (name.equals(CONFIG_URL_TAG)) 86 | conference.setConfigURL(readText(parser)); 87 | } 88 | 89 | parser.require(XmlPullParser.END_TAG, null, CONFERENCE_TAG); 90 | 91 | return conference; 92 | } 93 | 94 | private static String readText(XmlPullParser parser) throws XmlPullParserException, IOException { 95 | String result = ""; 96 | 97 | if(parser.next() == XmlPullParser.TEXT) { 98 | result = parser.getText(); 99 | parser.nextTag(); 100 | } 101 | return result; 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /source-code/app/src/main/java/org/buildmlearn/mconference/util/PlayServicesUnavailableDialogFragment.java: -------------------------------------------------------------------------------- 1 | package org.buildmlearn.mconference.util; 2 | 3 | import android.app.Dialog; 4 | import android.app.DialogFragment; 5 | import android.content.DialogInterface; 6 | import android.content.Intent; 7 | import android.net.Uri; 8 | import android.os.Bundle; 9 | import android.support.v7.app.AlertDialog; 10 | 11 | import org.buildmlearn.mconference.R; 12 | 13 | /** 14 | * Created by Paul on 8/11/15. 15 | */ 16 | public class PlayServicesUnavailableDialogFragment extends DialogFragment { 17 | 18 | @Override 19 | public Dialog onCreateDialog(Bundle savedInstanceState) { 20 | AlertDialog.Builder builder = new AlertDialog.Builder( getActivity() ); 21 | builder.setMessage( getResources().getString( R.string.dialog_play_services_unavailable ) ); 22 | builder.setNegativeButton(R.string.dialog_close_program, new DialogInterface.OnClickListener() { 23 | @Override 24 | public void onClick(DialogInterface dialogInterface, int i) { 25 | dismiss(); 26 | } 27 | }); 28 | 29 | builder.setPositiveButton( R.string.dialog_download_play_services, new DialogInterface.OnClickListener() { 30 | @Override 31 | public void onClick(DialogInterface dialogInterface, int i) { 32 | Intent intent = new Intent( Intent.ACTION_VIEW ); 33 | intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en") ); 34 | startActivity( intent ); 35 | } 36 | }); 37 | 38 | return builder.create(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable/ic_ham.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable/ic_ham.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable/logo.png -------------------------------------------------------------------------------- /source-code/app/src/main/res/drawable/placeholder_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildmLearn/mConference-Framework/4b18b827813a57682e5f6a216faefbb73f5169c7/source-code/app/src/main/res/drawable/placeholder_1.jpg -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/activity_base.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/activity_conference.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 18 | 19 | 24 | 25 | 26 | 27 | 34 | 35 | 36 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/activity_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 23 | 24 | 25 | 31 | 32 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/activity_schedule.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 18 | 19 | 24 | 25 | 26 | 27 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 14 | 15 | 26 | 27 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/activity_talk.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 23 | 24 | 31 | 32 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 14 | 15 | 18 | 19 | 26 | 27 | 37 | 38 | 47 | 48 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/fragment_day.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/fragment_register.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/fragment_sponsor.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/fragment_venue.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | 18 | 19 | 28 | 29 | 33 | 34 | 42 | 43 | 49 | 50 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/home_card_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 18 | 19 | 26 | 27 | 37 | 38 | 47 | 48 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/nav_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /source-code/app/src/main/res/layout/schedule_card_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | 20 | 21 | 29 | 39 | 51 | 52 | 61 | 62 | 70 | 71 | 79 | 80 | 85 | 86 |