From 92fd71673f134506464c34bb0e3e8d6354a2cd63 Mon Sep 17 00:00:00 2001 From: abhaychaware Date: Tue, 12 Jul 2016 08:02:04 +0530 Subject: [PATCH] Initial Commit Version 1.0 Initial Commit Version 1.0 --- .gitignore | 8 + .idea/.name | 1 + .idea/compiler.xml | 22 + .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 6 + .idea/gradle.xml | 18 + .idea/misc.xml | 65 +++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 + .idea/vcs.xml | 6 + app/.gitignore | 1 + app/build.gradle | 49 ++ app/proguard-rules.pro | 17 + .../chhotescientists/ApplicationTest.java | 13 + app/src/main/AndroidManifest.xml | 110 ++++ app/src/main/assets/fonts/Arch_Rival_Bold.ttf | Bin 0 -> 53128 bytes .../activity/CalenderViewActivity.java | 133 +++++ .../activity/ChangePasswordActivity.java | 240 ++++++++ .../activity/ExperimentDetailActivity.java | 128 +++++ .../activity/ExperimentViewActivity.java | 318 +++++++++++ .../activity/FeedbackActivity.java | 224 ++++++++ .../activity/ForgotPasswordActivity.java | 190 +++++++ .../activity/JoinEventActivity.java | 59 ++ .../activity/LoginActivity.java | 265 +++++++++ .../activity/MainActivity.java | 309 +++++++++++ .../activity/MyProfileActivity.java | 109 ++++ .../activity/PlayVideoActivity.java | 125 +++++ .../activity/RegisterActivity.java | 518 ++++++++++++++++++ .../activity/SplashActivity.java | 271 +++++++++ .../activity/UpdateDetailActivity.java | 129 +++++ .../activity/UpdateProfileActivity.java | 500 +++++++++++++++++ .../adapter/CustomRecycleCategoryAdapter.java | 62 +++ .../CustomRecycleExperimentAdapter.java | 60 ++ .../adapter/CustomRecycleUpdateAdapter.java | 63 +++ .../common/MyPreferences.java | 125 +++++ .../custom/DividerItemDecoration.java | 92 ++++ .../custom/FeedImageView.java | 250 +++++++++ .../fragment/ExperimentsFragment.java | 295 ++++++++++ .../fragment/UpdateFragment.java | 289 ++++++++++ .../chhotescientists/pojo/CategoryVO.java | 63 +++ .../chhotescientists/pojo/ExperimentVO.java | 82 +++ .../kpit/chhotescientists/pojo/UpdatesVO.java | 70 +++ .../chhotescientists/pojo/VersionCheckVO.java | 35 ++ .../chhotescientists/util/ActivityImage.java | 56 ++ .../chhotescientists/util/AppController.java | 68 +++ .../util/ConnectionDetector.java | 18 + .../chhotescientists/util/LruBitmapCache.java | 39 ++ .../chhotescientists/util/TouchImageView.java | 232 ++++++++ .../validation/Universal.java | 53 ++ app/src/main/res/anim/in_left_animation.xml | 6 + app/src/main/res/anim/in_right_animation.xml | 6 + app/src/main/res/anim/out_left_animation.xml | 6 + app/src/main/res/anim/out_right_animation.xml | 6 + app/src/main/res/anim/slide_in_left.xml | 8 + app/src/main/res/anim/slide_in_right.xml | 8 + .../main/res/drawable-v21/ic_menu_camera.xml | 12 + .../main/res/drawable-v21/ic_menu_gallery.xml | 9 + .../main/res/drawable-v21/ic_menu_manage.xml | 9 + .../main/res/drawable-v21/ic_menu_send.xml | 9 + .../main/res/drawable-v21/ic_menu_share.xml | 9 + .../res/drawable-v21/ic_menu_slideshow.xml | 9 + .../main/res/drawable/card_view_custom.xml | 23 + app/src/main/res/drawable/side_nav_bar.xml | 9 + .../textview_roundrect_background.xml | 15 + .../res/layout/activity_calender_view.xml | 22 + .../res/layout/activity_change_password.xml | 91 +++ .../main/res/layout/activity_edit_profile.xml | 164 ++++++ .../res/layout/activity_experiment_detail.xml | 140 +++++ .../res/layout/activity_experiment_view.xml | 58 ++ .../res/layout/activity_forgot_password.xml | 58 ++ .../main/res/layout/activity_join_event.xml | 14 + app/src/main/res/layout/activity_login.xml | 95 ++++ app/src/main/res/layout/activity_main.xml | 26 + .../main/res/layout/activity_play_video.xml | 20 + app/src/main/res/layout/activity_profile.xml | 162 ++++++ app/src/main/res/layout/activity_register.xml | 153 ++++++ .../res/layout/activity_send_feedback.xml | 115 ++++ app/src/main/res/layout/activity_splash.xml | 22 + .../res/layout/activity_update_detail.xml | 132 +++++ app/src/main/res/layout/activity_zoom.xml | 21 + app/src/main/res/layout/app_bar_main.xml | 18 + app/src/main/res/layout/content_main.xml | 33 ++ .../main/res/layout/fragment_experiments.xml | 40 ++ app/src/main/res/layout/fragment_update.xml | 58 ++ .../main/res/layout/grid_item_category.xml | 52 ++ .../main/res/layout/list_item_experiment.xml | 45 ++ app/src/main/res/layout/list_item_update.xml | 111 ++++ app/src/main/res/layout/nav_header_main.xml | 41 ++ .../res/layout/spinner_item_cs_center.xml | 9 + .../main/res/menu/activity_main_drawer.xml | 46 ++ app/src/main/res/menu/change_password.xml | 10 + app/src/main/res/menu/main.xml | 4 + app/src/main/res/menu/user_profile.xml | 10 + .../ic_calendar_check_grey600_48dp.png | Bin 0 -> 836 bytes .../ic_file_pdf_box_black_18dp.png | Bin 0 -> 456 bytes .../ic_file_pdf_box_black_24dp.png | Bin 0 -> 599 bytes .../ic_file_pdf_box_black_36dp.png | Bin 0 -> 820 bytes .../ic_file_pdf_box_black_48dp.png | Bin 0 -> 1083 bytes .../res/mipmap-hdpi/ic_image_white_48dp.png | Bin 0 -> 2175 bytes .../res/mipmap-hdpi/ic_key_white_48dp.png | Bin 0 -> 790 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5790 bytes .../res/mipmap-hdpi/ic_pencil_white_48dp.png | Bin 0 -> 504 bytes .../mipmap-hdpi/ic_refresh_grey600_48dp.png | Bin 0 -> 1568 bytes .../res/mipmap-hdpi/ic_refresh_white_48dp.png | Bin 0 -> 982 bytes .../ic_youtube_play_black_36dp.png | Bin 0 -> 731 bytes .../main/res/mipmap-hdpi/logo_transparent.png | Bin 0 -> 129497 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2982 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8976 bytes .../mipmap-xxhdpi/ic_account_grey600_48dp.png | Bin 0 -> 972 bytes .../ic_cloud_download_grey600_48dp.png | Bin 0 -> 1420 bytes .../mipmap-xxhdpi/ic_earth_grey600_48dp.png | Bin 0 -> 2011 bytes .../ic_google_play_grey600_48dp.png | Bin 0 -> 1425 bytes .../mipmap-xxhdpi/ic_home_grey600_48dp.png | Bin 0 -> 1327 bytes .../res/mipmap-xxhdpi/ic_key_grey600_48dp.png | Bin 0 -> 1055 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17381 bytes .../mipmap-xxhdpi/ic_logout_grey600_48dp.png | Bin 0 -> 715 bytes .../ic_share_variant_grey600_48dp.png | Bin 0 -> 1515 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes app/src/main/res/values-v21/styles.xml | 9 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/apiurls.xml | 20 + app/src/main/res/values/appconstant.xml | 18 + app/src/main/res/values/colors.xml | 20 + app/src/main/res/values/dimens.xml | 10 + app/src/main/res/values/drawables.xml | 8 + app/src/main/res/values/error_msg.xml | 23 + app/src/main/res/values/strings.xml | 20 + app/src/main/res/values/styles.xml | 28 + .../chhotescientists/ExampleUnitTest.java | 15 + build.gradle | 23 + gradle.properties | 18 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 ++++++ gradlew.bat | 90 +++ settings.gradle | 1 + 136 files changed, 8199 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/kpit/chhotescientists/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/assets/fonts/Arch_Rival_Bold.ttf create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/CalenderViewActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/ChangePasswordActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/ExperimentDetailActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/ExperimentViewActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/FeedbackActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/ForgotPasswordActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/JoinEventActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/LoginActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/MainActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/MyProfileActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/PlayVideoActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/RegisterActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/SplashActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/UpdateDetailActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/activity/UpdateProfileActivity.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleCategoryAdapter.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleExperimentAdapter.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleUpdateAdapter.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/common/MyPreferences.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/custom/DividerItemDecoration.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/custom/FeedImageView.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/fragment/ExperimentsFragment.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/fragment/UpdateFragment.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/pojo/CategoryVO.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/pojo/ExperimentVO.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/pojo/UpdatesVO.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/pojo/VersionCheckVO.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/util/ActivityImage.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/util/AppController.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/util/ConnectionDetector.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/util/LruBitmapCache.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/util/TouchImageView.java create mode 100644 app/src/main/java/com/kpit/chhotescientists/validation/Universal.java create mode 100644 app/src/main/res/anim/in_left_animation.xml create mode 100644 app/src/main/res/anim/in_right_animation.xml create mode 100644 app/src/main/res/anim/out_left_animation.xml create mode 100644 app/src/main/res/anim/out_right_animation.xml create mode 100644 app/src/main/res/anim/slide_in_left.xml create mode 100644 app/src/main/res/anim/slide_in_right.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_manage.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_send.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_share.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_slideshow.xml create mode 100644 app/src/main/res/drawable/card_view_custom.xml create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/drawable/textview_roundrect_background.xml create mode 100644 app/src/main/res/layout/activity_calender_view.xml create mode 100644 app/src/main/res/layout/activity_change_password.xml create mode 100644 app/src/main/res/layout/activity_edit_profile.xml create mode 100644 app/src/main/res/layout/activity_experiment_detail.xml create mode 100644 app/src/main/res/layout/activity_experiment_view.xml create mode 100644 app/src/main/res/layout/activity_forgot_password.xml create mode 100644 app/src/main/res/layout/activity_join_event.xml create mode 100644 app/src/main/res/layout/activity_login.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_play_video.xml create mode 100644 app/src/main/res/layout/activity_profile.xml create mode 100644 app/src/main/res/layout/activity_register.xml create mode 100644 app/src/main/res/layout/activity_send_feedback.xml create mode 100644 app/src/main/res/layout/activity_splash.xml create mode 100644 app/src/main/res/layout/activity_update_detail.xml create mode 100644 app/src/main/res/layout/activity_zoom.xml create mode 100644 app/src/main/res/layout/app_bar_main.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/fragment_experiments.xml create mode 100644 app/src/main/res/layout/fragment_update.xml create mode 100644 app/src/main/res/layout/grid_item_category.xml create mode 100644 app/src/main/res/layout/list_item_experiment.xml create mode 100644 app/src/main/res/layout/list_item_update.xml create mode 100644 app/src/main/res/layout/nav_header_main.xml create mode 100644 app/src/main/res/layout/spinner_item_cs_center.xml create mode 100644 app/src/main/res/menu/activity_main_drawer.xml create mode 100644 app/src/main/res/menu/change_password.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/menu/user_profile.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_calendar_check_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_file_pdf_box_black_18dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_file_pdf_box_black_24dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_file_pdf_box_black_36dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_file_pdf_box_black_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_image_white_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_key_white_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_pencil_white_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_refresh_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_refresh_white_48dp.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_youtube_play_black_36dp.png create mode 100644 app/src/main/res/mipmap-hdpi/logo_transparent.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_account_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_cloud_download_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_earth_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_google_play_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_home_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_key_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_logout_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_share_variant_grey600_48dp.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/apiurls.xml create mode 100644 app/src/main/res/values/appconstant.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/drawables.xml create mode 100644 app/src/main/res/values/error_msg.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/kpit/chhotescientists/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..8271cf4 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +ChhoteScientists \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..1bbc21d --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..51d2920 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..cc20d92 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..45cf85c --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..447445f --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,49 @@ +apply plugin: 'com.android.application' + +android { + useLibrary 'org.apache.http.legacy' + compileSdkVersion 23 + buildToolsVersion "23.0.3" + + defaultConfig { + applicationId "com.kpit.chhotescientists" + minSdkVersion 15 + targetSdkVersion 23 + versionCode 4 + versionName "4.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile 'junit:junit:4.12' + + compile 'com.android.support:appcompat-v7:23.0.1' + compile 'com.android.support:design:23.0.1' + compile 'com.android.volley:volley:1.0.0' + compile "org.apache.httpcomponents:httpcore:4.3.2" + compile 'com.android.support:cardview-v7:23.0.+' + compile 'com.android.support:recyclerview-v7:23.0.+' + compile 'com.github.npanigrahy:Custom-Calendar-View:v1.0' + /* + compile 'com.android.support:appcompat-v7:23.0.1' + compile 'com.android.support:design:23.0.1' + compile 'com.android.support:support-v4:23.1.0' + compile 'com.mcxiaoke.volley:library-aar:1.0.0' + compile 'com.android.support:cardview-v7:23.0.+' + compile "org.apache.httpcomponents:httpcore:4.3.2" + compile 'com.android.support:recyclerview-v7:23.0.+' + compile 'com.android.support:palette-v7:23.0.0' + //compile 'com.google.android.gms:play-services:8.4.0' + compile 'com.mikhaellopez:circularimageview:3.0.2' + */ +} +repositories { + maven { url "https://jitpack.io" } +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..c37dc46 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\vb\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/kpit/chhotescientists/ApplicationTest.java b/app/src/androidTest/java/com/kpit/chhotescientists/ApplicationTest.java new file mode 100644 index 0000000..59d8abb --- /dev/null +++ b/app/src/androidTest/java/com/kpit/chhotescientists/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.kpit.chhotescientists; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cbfba9d --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/fonts/Arch_Rival_Bold.ttf b/app/src/main/assets/fonts/Arch_Rival_Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9e83eb2a1053c077a6f7ea58bbc25cde661c3dd1 GIT binary patch literal 53128 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/CalenderViewActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/CalenderViewActivity.java new file mode 100644 index 0000000..9c4ab59 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/CalenderViewActivity.java @@ -0,0 +1,133 @@ +package com.kpit.chhotescientists.activity; + +import android.graphics.Color; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.AdapterView; +import android.widget.Toast; + +import com.imanoweb.calendarview.CalendarListener; +import com.imanoweb.calendarview.CustomCalendarView; +import com.imanoweb.calendarview.DayDecorator; +import com.imanoweb.calendarview.DayView; +import com.kpit.chhotescientists.R; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Random; + +/** + * Created by VB on 4/21/2016. + */ +public class CalenderViewActivity extends AppCompatActivity { + CustomCalendarView calendarView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_calender_view); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + //Initialize CustomCalendarView from layout + calendarView = (CustomCalendarView) findViewById(R.id.calendar_view); + + //Initialize calendar with date + Calendar currentCalendar = Calendar.getInstance(Locale.getDefault()); + + //Show Monday as first date of week + calendarView.setFirstDayOfWeek(Calendar.MONDAY); + + //Show/hide overflow days of a month + calendarView.setShowOverflowDate(false); + + //call refreshCalendar to update calendar the view + calendarView.refreshCalendar(currentCalendar); + + //Handling custom calendar events + calendarView.setCalendarListener(new CalendarListener() { + @Override + public void onDateSelected(Date date) { + SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); + Toast.makeText(CalenderViewActivity.this, df.format(date), Toast.LENGTH_SHORT).show(); + } + + @Override + public void onMonthChanged(Date date) { + SimpleDateFormat df = new SimpleDateFormat("MM-yyyy"); + Toast.makeText(CalenderViewActivity.this, df.format(date), Toast.LENGTH_SHORT).show(); + } + }); + + + //Setting custom font + final Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Arch_Rival_Bold.ttf"); + if (null != typeface) { + calendarView.setCustomTypeface(typeface); + calendarView.refreshCalendar(currentCalendar); + } + + + //adding calendar day decorators + List decorators = new ArrayList<>(); + + decorators.add(new ColorDecorator()); + calendarView.setDecorators(decorators); + calendarView.refreshCalendar(currentCalendar); + + } + + + private class ColorDecorator implements DayDecorator { + + @Override + public void decorate(DayView cell) { + Random rnd = new Random(); + int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); + cell.setBackgroundColor(color); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/ChangePasswordActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/ChangePasswordActivity.java new file mode 100644 index 0000000..6e39bfe --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/ChangePasswordActivity.java @@ -0,0 +1,240 @@ +package com.kpit.chhotescientists.activity; + +import android.app.ProgressDialog; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.util.ConnectionDetector; +import com.kpit.chhotescientists.validation.Universal; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by dnyaneshwarkanpurne on 3/17/16. + */ +@SuppressWarnings("ALL") +public class ChangePasswordActivity extends AppCompatActivity { + Button btnChangePassword; + ProgressDialog pDialog; + MyPreferences myPreferences; + EditText cpassword, npassword, ncpassword; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_change_password); + + getSupportActionBar().show(); + + myPreferences = new MyPreferences(this); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + cpassword = (EditText) findViewById(R.id.input_currentpassword); + npassword = (EditText) findViewById(R.id.input_newpassword); + ncpassword = (EditText) findViewById(R.id.input_confirmpassword); + + + btnChangePassword = (Button) findViewById(R.id.btn_change_password); + btnChangePassword.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //Toast.makeText(ChnagePasswordActivity.this, "Change Password btn hit triggered", Toast.LENGTH_SHORT).show(); + + if (isValidation()) { + if (ConnectionDetector.isConnectingToInternet(ChangePasswordActivity.this)) { + + new ExecuteChangePasswoed().execute(getString(R.string.change_password_url)); + + } else { + Toast.makeText(ChangePasswordActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + } else { + + } + + } + }); + + } + + public boolean isValidation() { + + if (!Universal.isEmpty(cpassword)) { + cpassword.setError(getString(R.string.val_enter_current_pass)); + return false; + } + + //password valiadtion + if (!Universal.isEmpty(npassword)) { + npassword.setError(getString(R.string.val_enter_new_pass)); + return false; + } + + if (!Universal.isEmpty(ncpassword)) { + ncpassword.setError(getString(R.string.val_enter_confirm_pass)); + return false; + } + if (!npassword.getText().toString().trim().equals(ncpassword.getText().toString().trim())) { + npassword.setError("Password Mismatch"); + ncpassword.setError("Password Mismatch"); + return false; + } + + + return true; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } + + private class ExecuteChangePasswoed extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + // Showing progress dialog + pDialog = new ProgressDialog(ChangePasswordActivity.this); + pDialog.setMessage("Please wait..."); + pDialog.setCancelable(false); + pDialog.show(); + } + + @Override + protected String doInBackground(String... params) { + // Creating service handler class instance + try { + HttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(params[0]); + + List parameters = new ArrayList(2); + + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("uid", myPreferences.getUserId()); + + jsonObject.put("cpassword", cpassword.getText().toString().trim()); + + jsonObject.put("npassword", npassword.getText().toString().trim()); + + + parameters.add(new BasicNameValuePair("data", jsonObject + .toString())); + Log.e("JSON Sent", jsonObject.toString()); + httpPost.setEntity(new UrlEncodedFormEntity(parameters)); + HttpResponse httpResponse = httpClient.execute(httpPost); + + String responce = EntityUtils + .toString(httpResponse.getEntity()); + Log.e("Server JOSN", responce); + return responce; + } catch (JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + @Override + protected void onPostExecute(String data) { + Log.e("Server Response", data + "--"); + pDialog.dismiss(); + int statusflag = 0; + JSONObject jsonObj; + try { + jsonObj = new JSONObject(data); + //JSONObject jsonObj1 = jsonObj.getJSONObject("data"); + statusflag = Integer.parseInt(jsonObj.getString("success")); + Log.e("response status flag", String.valueOf(statusflag)); + } catch (JSONException e) { + e.printStackTrace(); + } + + if (statusflag == 1) { + + Toast.makeText(ChangePasswordActivity.this, + "Password Updated Successfully.", Toast.LENGTH_SHORT) + .show(); + /*ChnagePasswordActivity.this.finish(); + Intent i = new Intent(ChnagePasswordActivity.this, + LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + ChnagePasswordActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + ChnagePasswordActivity.this, i, bundle);*/ + + + onBackPressed(); + } else { + //pDialog.dismiss(); + Toast.makeText(ChangePasswordActivity.this, + "Password Update Unsuccessful, Sorry for inconvience.", Toast.LENGTH_SHORT) + .show(); + + } + + + } + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/ExperimentDetailActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/ExperimentDetailActivity.java new file mode 100644 index 0000000..a22247f --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/ExperimentDetailActivity.java @@ -0,0 +1,128 @@ +package com.kpit.chhotescientists.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AppCompatActivity; +import android.text.Html; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.TextView; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.pojo.ExperimentVO; + +/** + * Created by VB on 4/19/2016. + */ +public class ExperimentDetailActivity extends AppCompatActivity { + String rcvdCatID, rcvdCatName,rcvdExpName,rcvdVideoURL,rcvdPdfURL; + + TextView txtExpname, txtExpCat, txtExpDesc; + Button btnPlayVideo, btnViewPDF; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_experiment_detail); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + txtExpname = (TextView) findViewById(R.id.textView2); + txtExpCat = (TextView) findViewById(R.id.textView6); + txtExpDesc = (TextView) findViewById(R.id.textView9); + + btnPlayVideo = (Button) findViewById(R.id.btn_play_video); + btnViewPDF= (Button) findViewById(R.id.btn_view_pdf); + + // 1. get passed intent + Intent intent = getIntent(); + + rcvdCatName = intent.getExtras().getString("catName"); + + // 2. get person object from intent + ExperimentVO item = (ExperimentVO) intent.getSerializableExtra("expObj"); + + setTitle(item.getExpname()); + rcvdExpName=item.getExpname(); + + rcvdVideoURL=item.getExpVideoURL(); + rcvdPdfURL=item.getExpPDFUrl(); + + txtExpname.setText(item.getExpname()); + txtExpCat.setText(rcvdCatName); + txtExpDesc.setText(Html.fromHtml(item.getExpdescription())); + + btnPlayVideo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent(ExperimentDetailActivity.this, PlayVideoActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + ExperimentDetailActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + + i.putExtra("expName",rcvdExpName); + i.putExtra("viewURL",rcvdVideoURL); + i.putExtra("flag","1"); + + + ActivityCompat.startActivity(ExperimentDetailActivity.this, i, bundle); + } + }); + btnViewPDF.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent(ExperimentDetailActivity.this, PlayVideoActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + ExperimentDetailActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + + i.putExtra("expName",rcvdExpName); + i.putExtra("viewURL",rcvdPdfURL); + i.putExtra("flag","2"); + ActivityCompat.startActivity(ExperimentDetailActivity.this, i, bundle); + } + }); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/ExperimentViewActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/ExperimentViewActivity.java new file mode 100644 index 0000000..2e204a7 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/ExperimentViewActivity.java @@ -0,0 +1,318 @@ +package com.kpit.chhotescientists.activity; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.GestureDetector; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.adapter.CustomRecycleExperimentAdapter; +import com.kpit.chhotescientists.custom.DividerItemDecoration; +import com.kpit.chhotescientists.pojo.CategoryVO; +import com.kpit.chhotescientists.pojo.ExperimentVO; +import com.kpit.chhotescientists.util.AppController; +import com.kpit.chhotescientists.util.ConnectionDetector; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by VB on 4/19/2016. + */ +@SuppressWarnings("ALL") +public class ExperimentViewActivity extends AppCompatActivity implements + SwipeRefreshLayout.OnRefreshListener { + + String rcvdCatID, rcvdCatName; + View v; + SwipeRefreshLayout mSwipeLayout; + ProgressBar pBar; + TextView txtNoNWMessage; + private List feedItems = new ArrayList<>(); + private RecyclerView recyclerView; + private CustomRecycleExperimentAdapter mAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_experiment_view); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + + pBar = (ProgressBar) findViewById(R.id.progressBar2); + txtNoNWMessage = (TextView) findViewById(R.id.textView); + + mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container); + mSwipeLayout.setOnRefreshListener(ExperimentViewActivity.this); + mSwipeLayout.setColorSchemeResources(android.R.color.holo_blue_bright, + android.R.color.holo_green_light, + android.R.color.holo_orange_light, + android.R.color.holo_red_light); + + recyclerView = (RecyclerView) findViewById(R.id.recycler_view); + + // 1. get passed intent + Intent intent = getIntent(); + + // 2. get person object from intent + CategoryVO item = (CategoryVO) intent.getSerializableExtra("categoryObj"); + + rcvdCatID = item.getCatID(); + + setTitle(item.getCatName()); + + //passing on experiment detail scrrenn + rcvdCatName = item.getCatName(); + + loadUpdates(); + + recyclerView.addOnItemTouchListener(new RecyclerTouchListener(ExperimentViewActivity.this, recyclerView, new ClickListener() { + @Override + public void onClick(View view, int position) { + + ExperimentVO item = feedItems.get(position); + + Intent i = new Intent(ExperimentViewActivity.this, + ExperimentDetailActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + ExperimentViewActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + + i.putExtra("expObj", item); + i.putExtra("catName", rcvdCatName); + ActivityCompat.startActivity(ExperimentViewActivity.this, i, bundle); + + } + + @Override + public void onLongClick(View view, int position) { + + } + })); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } + + //api call to get updates + private void loadUpdates() { + + recyclerView.setVisibility(View.VISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + //txtNoNWMessage.setText("No data to display."); + txtNoNWMessage.setVisibility(View.GONE); + + feedItems = new ArrayList(); + mAdapter = new CustomRecycleExperimentAdapter(feedItems); + + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setAdapter(mAdapter); + + if (!mSwipeLayout.isRefreshing()) + pBar.setVisibility(View.VISIBLE); + + if (ConnectionDetector.isConnectingToInternet(this)) { + + // making fresh volley request and getting json + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_selected_experiment).concat("?exp_cat=" + rcvdCatID), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + recyclerView.setVisibility(View.INVISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + txtNoNWMessage.setText("Error occured.Please try after sometime"); + txtNoNWMessage.setVisibility(View.VISIBLE); + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + + } else { + recyclerView.setVisibility(View.INVISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + txtNoNWMessage.setText("No data to display."); + txtNoNWMessage.setVisibility(View.VISIBLE); + } + + } + + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeed(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + ExperimentVO item = new ExperimentVO(); + + item.setExpid(feedObj.getString("exp_id")); + item.setExpname(feedObj.getString("exp_name")); + item.setExpdescription(feedObj.getString("exp_description")); + item.setExpimage(feedObj.getString("exp_image")); + item.setExpcat(feedObj.getString("exp_cat")); + item.setExpVideoURL(feedObj.getString("exp_video_url")); + item.setExpPDFUrl(feedObj.getString("exp_pdf_url")); + feedItems.add(item); + //adapter.notifyDataSetChanged(); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + ExperimentViewActivity.this.runOnUiThread(new Runnable() { + + @Override + public void run() { + pBar.setVisibility(View.GONE); + mSwipeLayout.setRefreshing(false); + mAdapter.notifyDataSetChanged(); + } + }); + } + }).start(); + + } + + @Override + public void onRefresh() { + loadUpdates(); + } + + public interface ClickListener { + void onClick(View view, int position); + + void onLongClick(View view, int position); + } + + public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { + + private GestureDetector gestureDetector; + private ExperimentViewActivity.ClickListener clickListener; + + public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ExperimentViewActivity.ClickListener clickListener) { + this.clickListener = clickListener; + gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + + @Override + public void onLongPress(MotionEvent e) { + View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); + if (child != null && clickListener != null) { + clickListener.onLongClick(child, recyclerView.getChildPosition(child)); + } + } + }); + } + + @Override + public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { + + View child = rv.findChildViewUnder(e.getX(), e.getY()); + if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { + clickListener.onClick(child, rv.getChildPosition(child)); + } + return false; + } + + @Override + public void onTouchEvent(RecyclerView rv, MotionEvent e) { + } + + @Override + public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/FeedbackActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/FeedbackActivity.java new file mode 100644 index 0000000..65eb62d --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/FeedbackActivity.java @@ -0,0 +1,224 @@ +package com.kpit.chhotescientists.activity; + +import android.app.ProgressDialog; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.util.ConnectionDetector; +import com.kpit.chhotescientists.validation.Universal; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vb on 4/11/2016. + */ +@SuppressWarnings("ALL") +public class FeedbackActivity extends AppCompatActivity { + + EditText edtFullname, edtEmail, edtMobile, edtQuery; + MyPreferences myPreferences; + ProgressDialog pDialog; + Button btnSend; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_send_feedback); + + myPreferences = new MyPreferences(this); + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + edtFullname = (EditText) findViewById(R.id.input_fullname); + edtEmail = (EditText) findViewById(R.id.input_email); + edtMobile = (EditText) findViewById(R.id.input_mobile); + edtQuery = (EditText) findViewById(R.id.input_message); + + edtFullname.setText(myPreferences.getUserFullname()); + edtEmail.setText(myPreferences.getUserEmail()); + edtMobile.setText(myPreferences.getUserMobile()); + + btnSend = (Button) findViewById(R.id.btn_send_contact); + btnSend.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //Toast.makeText(ChnagePasswordActivity.this, "Change Password btn hit triggered", Toast.LENGTH_SHORT).show(); + + if (isValidation()) { + if (ConnectionDetector.isConnectingToInternet(FeedbackActivity.this)) { + + new ExecuteSendFeedback().execute(getString(R.string.send_contact_feedback)); + + } else { + Toast.makeText(FeedbackActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + } else { + + } + + } + }); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } + + public boolean isValidation() { + + if (!Universal.isEmpty(edtQuery)) { + edtQuery.setError(getString(R.string.val_enter_feedback_query)); + return false; + } + + return true; + } + + private class ExecuteSendFeedback extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + // Showing progress dialog + pDialog = new ProgressDialog(FeedbackActivity.this); + pDialog.setMessage("Please wait..."); + pDialog.setCancelable(false); + pDialog.show(); + } + + @Override + protected String doInBackground(String... params) { + // Creating service handler class instance + try { + HttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(params[0]); + + List parameters = new ArrayList(2); + + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("uid", myPreferences.getUserId()); + jsonObject.put("message", edtQuery.getText().toString().trim()); + + parameters.add(new BasicNameValuePair("data", jsonObject + .toString())); + Log.e("JSON Sent", jsonObject.toString()); + httpPost.setEntity(new UrlEncodedFormEntity(parameters)); + HttpResponse httpResponse = httpClient.execute(httpPost); + + String responce = EntityUtils + .toString(httpResponse.getEntity()); + Log.e("Server JOSN", responce); + return responce; + } catch (JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + @Override + protected void onPostExecute(String data) { + Log.e("Server Response", data + "--"); + pDialog.dismiss(); + int statusflag = 0; + JSONObject jsonObj; + try { + jsonObj = new JSONObject(data); + //JSONObject jsonObj1 = jsonObj.getJSONObject("data"); + statusflag = Integer.parseInt(jsonObj.getString("success")); + Log.e("response status flag", String.valueOf(statusflag)); + } catch (JSONException e) { + e.printStackTrace(); + } + + if (statusflag == 1) { + + Toast.makeText(FeedbackActivity.this, + "Feedback Submitted Successfully.", Toast.LENGTH_SHORT) + .show(); + /*ChnagePasswordActivity.this.finish(); + Intent i = new Intent(ChnagePasswordActivity.this, + LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + ChnagePasswordActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + ChnagePasswordActivity.this, i, bundle);*/ + + + onBackPressed(); + } else { + //pDialog.dismiss(); + Toast.makeText(FeedbackActivity.this, + "Unable to submit feedback, Sorry for inconvience.", Toast.LENGTH_SHORT) + .show(); + + } + + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/ForgotPasswordActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/ForgotPasswordActivity.java new file mode 100644 index 0000000..80fcb17 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/ForgotPasswordActivity.java @@ -0,0 +1,190 @@ +package com.kpit.chhotescientists.activity; + +import android.app.ProgressDialog; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.util.ConnectionDetector; +import com.kpit.chhotescientists.validation.Universal; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vb on 4/15/2016. + */ +@SuppressWarnings("ALL") +public class ForgotPasswordActivity extends AppCompatActivity { + + //Declaration + Button btnlogin; + TextView txtSignup; + EditText edtUsername; + String username; + JSONArray resAuth; + private MyPreferences mPreferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_forgot_password); + + edtUsername = (EditText) findViewById(R.id.input_mobile); + + btnlogin = (Button) findViewById(R.id.btn_login); + + btnlogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (isValidation()) { + + if (ConnectionDetector + .isConnectingToInternet(ForgotPasswordActivity.this)) { + + new ExecuteUserForgotPasswordTask().execute(getString(R.string.forgot_password_url)); + + } else { + Toast.makeText( + ForgotPasswordActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + + } else { + + } + + + } + + + }); + } + + //registration validation + public boolean isValidation() { + + if (!Universal.isEmpty(edtUsername)) { + edtUsername.setError("Please Enter Email/Mobile"); + return false; + } + + return true; + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } + + private class ExecuteUserForgotPasswordTask extends + AsyncTask { + + ProgressDialog mProgressDialog; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + mProgressDialog = new ProgressDialog( + ForgotPasswordActivity.this); + mProgressDialog.setMessage("Please wait..."); + mProgressDialog.show(); + } + + + @Override + protected String doInBackground(String... params) { + + try { + + HttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(params[0]); + + List parameters = new ArrayList(2); + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("user_mobile", edtUsername.getText().toString().trim()); + jsonObject.put("user_email", edtUsername.getText().toString().trim()); + + parameters.add(new BasicNameValuePair("data", jsonObject + .toString())); + Log.e("JSON Sent", jsonObject.toString()); + httpPost.setEntity(new UrlEncodedFormEntity(parameters)); + HttpResponse httpResponse = httpClient.execute(httpPost); + + String responce = EntityUtils + .toString(httpResponse.getEntity()); + Log.e("Server JOSN", responce); + return responce; + } catch (JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + protected void onPostExecute(String response) { + Log.e("Server Response", response + "--"); + + int flag = 0; + JSONObject jsonObj = null; + try { + jsonObj = new JSONObject(response); + resAuth = jsonObj.getJSONArray("data"); + JSONObject feedObj = resAuth.getJSONObject(0); + flag = feedObj.getInt("success"); + + Log.e("log in flag ", String.valueOf(flag)); + } catch (JSONException e) { + e.printStackTrace(); + } + + + if (flag != 0) { + + mProgressDialog.dismiss(); + Toast.makeText(ForgotPasswordActivity.this, + "Password sent on your registered email address.", Toast.LENGTH_SHORT) + .show(); + onBackPressed(); + } else { + mProgressDialog.dismiss(); + Toast.makeText(ForgotPasswordActivity.this, + "Forgot Password Assistance Unsuccessful, Sorry for inconvience.", Toast.LENGTH_SHORT) + .show(); + + } + + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/JoinEventActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/JoinEventActivity.java new file mode 100644 index 0000000..73e70c8 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/JoinEventActivity.java @@ -0,0 +1,59 @@ +package com.kpit.chhotescientists.activity; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.AdapterView; + +import com.kpit.chhotescientists.R; + +/** + * Created by vb on 4/11/2016. + */ +public class JoinEventActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_join_event); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/LoginActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/LoginActivity.java new file mode 100644 index 0000000..19c57cf --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/LoginActivity.java @@ -0,0 +1,265 @@ +package com.kpit.chhotescientists.activity; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.util.ConnectionDetector; +import com.kpit.chhotescientists.validation.Universal; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vb on 4/11/2016. + */ +@SuppressWarnings("ALL") +public class LoginActivity extends AppCompatActivity { + + //Declaration + Button btnlogin; + TextView txtSignup; + TextView txtForgotPassword; + EditText edtUsername, edtPassword; + String username, password; + JSONArray resAuth; + private MyPreferences mPreferences; + + //SharedPreferences shared; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + + mPreferences = new MyPreferences(this); + + edtUsername = (EditText) findViewById(R.id.input_username); + edtPassword = (EditText) findViewById(R.id.input_password); + txtSignup = (TextView) findViewById(R.id.linkRegister); + txtForgotPassword = (TextView) findViewById(R.id.textView7); + btnlogin = (Button) findViewById(R.id.btn_login); + + btnlogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + + if (isValidation()) { + + if (ConnectionDetector + .isConnectingToInternet(LoginActivity.this)) { + + new ExecuteUserLoginTask().execute(getString(R.string.login_user)); + + } else { + Toast.makeText( + LoginActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + + } else { + + } + + + } + + + }); + txtSignup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent i = new Intent(LoginActivity.this, RegisterActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + LoginActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(LoginActivity.this, i, bundle); + + } + }); + + txtForgotPassword.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + + Intent i = new Intent(LoginActivity.this, ForgotPasswordActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + LoginActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(LoginActivity.this, i, bundle); + } + }); + } + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void SaveUserDataProfile(JSONObject response) { + try { + + JSONArray feedArray = response.getJSONArray("user"); + Log.e("Saving User Profile", response.toString()); + + JSONObject feedObj = (JSONObject) feedArray.get(0); + + mPreferences.setUserId(feedObj.getString("user_id")); + mPreferences.setUserFullname(feedObj.getString("user_fullname")); + mPreferences.setUserMobile(feedObj.getString("user_mobile")); + mPreferences.setUserEmail(feedObj.getString("user_email")); + mPreferences.setUserResidence(feedObj.getString("user_area_of_residence")); + mPreferences.setUserCenter(feedObj.getString("user_nearest_cs_center")); + + + } catch (JSONException e) { + e.printStackTrace(); + } + } + + //registration validation + public boolean isValidation() { + + if (!Universal.isEmpty(edtUsername)) { + edtUsername.setError(getString(R.string.login_enter_username)); + return false; + } + + //password valiadtion + if (!Universal.isEmpty(edtPassword)) { + edtPassword.setError(getString(R.string.login_enter_password)); + return false; + } + + return true; + } + + private class ExecuteUserLoginTask extends + AsyncTask { + + ProgressDialog mProgressDialog; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + mProgressDialog = new ProgressDialog( + LoginActivity.this); + mProgressDialog.setMessage(getString(R.string.login_loading)); + mProgressDialog.show(); + } + + + @Override + protected String doInBackground(String... params) { + + try { + + HttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(params[0]); + + List parameters = new ArrayList(2); + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("user_mobile", edtUsername.getText().toString().trim()); + jsonObject.put("user_email", edtUsername.getText().toString().trim()); + jsonObject.put("user_password", edtPassword.getText().toString().trim()); + + parameters.add(new BasicNameValuePair("data", jsonObject + .toString())); + + Log.e("JSON Sent", jsonObject.toString()); + + httpPost.setEntity(new UrlEncodedFormEntity(parameters)); + HttpResponse httpResponse = httpClient.execute(httpPost); + + String responce = EntityUtils + .toString(httpResponse.getEntity()); + Log.e("Server JOSN", responce); + return responce; + } catch (JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + protected void onPostExecute(String response) { + Log.e("Server Response", response + "--"); + + int flag = 0; + JSONObject jsonObj = null; + try { + jsonObj = new JSONObject(response); + resAuth = jsonObj.getJSONArray("data"); + JSONObject feedObj = resAuth.getJSONObject(0); + flag = feedObj.getInt("success"); + + Log.e("log in flag ", String.valueOf(flag)); + } catch (JSONException e) { + e.printStackTrace(); + } + + + if (flag != 0) { + + mProgressDialog.dismiss(); + + + LoginActivity.this.finish(); + Intent i = new Intent(LoginActivity.this, + MainActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + LoginActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + LoginActivity.this, i, bundle); + + //saving data to prefrences. + SaveUserDataProfile(jsonObj); + + Toast.makeText(LoginActivity.this, + getString(R.string.notify_welcome), Toast.LENGTH_SHORT) + .show(); + + } else { + mProgressDialog.dismiss(); + Toast.makeText(LoginActivity.this, + getString(R.string.login_unsusccess), Toast.LENGTH_SHORT) + .show(); + + } + + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/MainActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/MainActivity.java new file mode 100644 index 0000000..6c308a7 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/MainActivity.java @@ -0,0 +1,309 @@ +package com.kpit.chhotescientists.activity; + +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.support.design.widget.NavigationView; +import android.support.design.widget.Snackbar; +import android.support.design.widget.TabLayout; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.GravityCompat; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.fragment.ExperimentsFragment; +import com.kpit.chhotescientists.fragment.UpdateFragment; +import com.kpit.chhotescientists.util.ConnectionDetector; + +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("ALL") +public class MainActivity extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener { + + MyPreferences myPreferences; + TextView navUsername, navEmail; + //tabs + private Toolbar toolbar; + private TabLayout tabLayout; + private ViewPager viewPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + //instance + myPreferences = new MyPreferences(this); + + //single sign on flag + myPreferences.setFirstTimeLaunch(false); + + navUsername = (TextView) findViewById(R.id.nav_username); + navEmail = (TextView) findViewById(R.id.nav_email); + + navUsername.setText(myPreferences.getUserFullname()); + navEmail.setText(myPreferences.getUserEmail()); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + + /* + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + + } + }); + */ + + + //tabs + viewPager = (ViewPager) findViewById(R.id.viewpager); + setupViewPager(viewPager); + + tabLayout = (TabLayout) findViewById(R.id.tabs); + tabLayout.setupWithViewPager(viewPager); + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.setDrawerListener(toggle); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this); + + if (ConnectionDetector.isConnectingToInternet(getApplicationContext())) { + + + } else { + snackDisplay(); + } + + } + + //function to handle snackbar + public void snackDisplay() { + Snackbar snackbar = Snackbar + .make(viewPager, "No internet connection!", Snackbar.LENGTH_INDEFINITE) + .setAction("RETRY", new View.OnClickListener() { + @Override + public void onClick(View view) { + + if (ConnectionDetector.isConnectingToInternet(getApplicationContext())) { + + setupViewPager(viewPager); + + + } else { + + snackDisplay(); + } + + } + }); + + // Changing message text color + snackbar.setActionTextColor(Color.RED); + + // Changing action button text color + View sbView = snackbar.getView(); + TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); + textView.setTextColor(Color.YELLOW); + + snackbar.show(); + } + + public void init() { + myPreferences.setUserId("1"); + myPreferences.setUserFullname("Dnyaneshwar Kanpurne"); + myPreferences.setUserMobile("9922969951"); + myPreferences.setUserEmail("dkanpurne@gmail.com"); + myPreferences.setUserResidence("Latur"); + myPreferences.setUserCenter("Pune"); + } + + private void setupViewPager(ViewPager viewPager) { + ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); + + adapter.addFragment(new UpdateFragment(), "Updates"); + adapter.addFragment(new ExperimentsFragment(), "Experiments"); + viewPager.setAdapter(adapter); + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else { + super.onBackPressed(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement +// if (id == R.id.action_settings) { +// return true; +// } + + return super.onOptionsItemSelected(item); + } + + @SuppressWarnings("StatementWithEmptyBody") + @Override + public boolean onNavigationItemSelected(MenuItem item) { + // Handle navigation view item clicks here. + int id = item.getItemId(); + if (id == R.id.nav_calender) { + Intent i = new Intent(MainActivity.this, CalenderViewActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + MainActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(MainActivity.this, i, bundle); + + } else if (id == R.id.nav_profile) { + //redirection to view my profile + Intent i = new Intent(MainActivity.this, MyProfileActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + MainActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(MainActivity.this, i, bundle); + + } else if (id == R.id.nav_feedback) { + //redirecting to feedback activity + Intent i = new Intent(MainActivity.this, FeedbackActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + MainActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(MainActivity.this, i, bundle); + + } else if (id == R.id.nav_logout) { + + + //single sign on flag + myPreferences.setFirstTimeLaunch(true); + Toast.makeText(MainActivity.this, + "Logout Successful.", Toast.LENGTH_SHORT) + .show(); + MainActivity.this.finish(); + Intent i = new Intent(MainActivity.this, + LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + MainActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + MainActivity.this, i, bundle); + + + } else if (id == R.id.nav_share) { + try { + Intent i = new Intent(Intent.ACTION_SEND); + i.setType("text/plain"); + i.putExtra(Intent.EXTRA_SUBJECT, "Cityfi"); + String sAux = "\nLet me recommend you this application\n\n"; + sAux = sAux + + "https://play.google.com/store/apps/details?id=com.kpit.chhotescientists \n\n"; + i.putExtra(Intent.EXTRA_TEXT, sAux); + startActivity(Intent.createChooser(i, "Choose One ,")); + } catch (Exception e) { // e.toString(); + } + } else if (id == R.id.nav_send) { + goToMyApp(true); + } + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } + + public void goToMyApp(boolean googlePlay) { + try { + startActivity(new Intent(Intent.ACTION_VIEW, + Uri.parse((googlePlay ? "market://details?id=" + : "amzn://apps/android?p=") + getPackageName()))); + } catch (ActivityNotFoundException e1) { + try { + startActivity(new Intent( + Intent.ACTION_VIEW, + Uri.parse((googlePlay ? "https://play.google.com/store/apps/details?id=com.kpit.chhotescientists" + : "https://play.google.com/store/apps/details?id=com.kpit.chhotescientists") + + getPackageName()))); + } catch (ActivityNotFoundException e2) { + Toast.makeText(this, + "You don't have any app that can open this link", + Toast.LENGTH_SHORT).show(); + } + } + } + + public class ViewPagerAdapter extends FragmentPagerAdapter { + private final List mFragmentList = new ArrayList(); + private final List mFragmentTitleList = new ArrayList(); + + public ViewPagerAdapter(FragmentManager manager) { + super(manager); + } + + + @Override + public Fragment getItem(int position) { + return mFragmentList.get(position); + } + + @Override + public int getCount() { + return mFragmentList.size(); + } + + public void addFragment(Fragment fragment, String title) { + mFragmentList.add(fragment); + mFragmentTitleList.add(title); + } + + @Override + public CharSequence getPageTitle(int position) { + return mFragmentTitleList.get(position); + } + + + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/MyProfileActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/MyProfileActivity.java new file mode 100644 index 0000000..40098cf --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/MyProfileActivity.java @@ -0,0 +1,109 @@ +package com.kpit.chhotescientists.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; + +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; + +/** + * Created by vb on 4/11/2016. + */ +public class MyProfileActivity extends AppCompatActivity { + MyPreferences myPreferences; + + EditText edtFullname, edtMobile, edtEmail, edtResidence, edtCenter; + + Button btnUpdate; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_profile); + + myPreferences = new MyPreferences(this); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + btnUpdate = (Button) findViewById(R.id.btn_update_profile); + edtFullname = (EditText) findViewById(R.id.input_fullname); + edtMobile = (EditText) findViewById(R.id.input_mobile); + edtEmail = (EditText) findViewById(R.id.input_email); + edtResidence = (EditText) findViewById(R.id.input_residence); + edtCenter = (EditText) findViewById(R.id.input_center); + + edtFullname.setText(myPreferences.getUserFullname()); + edtMobile.setText(myPreferences.getUserMobile()); + edtEmail.setText(myPreferences.getUserEmail()); + edtResidence.setText(myPreferences.getUserResidence()); + edtCenter.setText(myPreferences.getUserCenter()); + + btnUpdate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent i = new Intent(MyProfileActivity.this, UpdateProfileActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + MyProfileActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(MyProfileActivity.this, i, bundle); + } + }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + protected void onResume() { + super.onResume(); + + edtResidence.setText(myPreferences.getUserResidence()); + edtCenter.setText(myPreferences.getUserCenter()); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; +// case R.id.action_editprofile: +// Log.e("TAG", "Hello"); +// setTitle("Edit Profile"); +// cv.setVisibility(View.GONE); +// cv_edit.setVisibility(View.VISIBLE); +// break; + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/PlayVideoActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/PlayVideoActivity.java new file mode 100644 index 0000000..e409fa5 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/PlayVideoActivity.java @@ -0,0 +1,125 @@ +package com.kpit.chhotescientists.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.AdapterView; +import android.widget.ProgressBar; +import android.widget.Toast; + +import com.kpit.chhotescientists.R; + +/** + * Created by VB on 4/20/2016. + */ +@SuppressWarnings("ALL") +public class PlayVideoActivity extends AppCompatActivity { + private WebView web; + String rcvExpName, rcvdURL, rcvdFlag; + WebView wv1; + ProgressBar progressBar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_play_video); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + // 1. get passed intent + Intent intent = getIntent(); + + rcvExpName = intent.getExtras().getString("expName"); + rcvdURL = intent.getExtras().getString("viewURL"); + rcvdFlag = intent.getExtras().getString("flag"); + + setTitle(rcvExpName); + + //Get webview + web = (WebView) findViewById(R.id.webview); + progressBar = (ProgressBar) findViewById(R.id.progressBar1); + //startWebView("http://docs.google.com/gview?embedded=true&url="+"http://hotelpodlipou.sk/uploads/files/sample.pdf"); + //startWebView("https://www.youtube.com/watch?v=ySKG-2vmw5w"); + + web.setWebViewClient(new myWebClient()); + web.getSettings().setJavaScriptEnabled(true); + + if (rcvdFlag.equals("1")) { + web.loadUrl(rcvdURL); + } else if (rcvdFlag.equals("2")) { + web.loadUrl("http://docs.google.com/gview?embedded=true&url=" + rcvdURL); + } else { + Toast.makeText(PlayVideoActivity.this, "Unable to load url", Toast.LENGTH_SHORT).show(); + onBackPressed(); + } + + + } + + public class myWebClient extends WebViewClient { + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + // TODO Auto-generated method stub + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + // TODO Auto-generated method stub + progressBar.setVisibility(View.VISIBLE); + view.loadUrl(url); + return true; + + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + super.onPageFinished(view, url); + + progressBar.setVisibility(View.GONE); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/RegisterActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/RegisterActivity.java new file mode 100644 index 0000000..bf91232 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/RegisterActivity.java @@ -0,0 +1,518 @@ +package com.kpit.chhotescientists.activity; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.Color; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.util.AppController; +import com.kpit.chhotescientists.util.ConnectionDetector; +import com.kpit.chhotescientists.validation.Universal; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vb on 4/11/2016. + */ +@SuppressWarnings("ALL") +public class RegisterActivity extends AppCompatActivity { + + AutoCompleteTextView autocResidence; + EditText edtFullname, edtMobile, edtEmail, edtPassword, edtCpassword; + Button registerButtonAction; + Spinner csCenters; + ProgressBar pBar; + String strCSCenter = ""; + private ArrayList feedItems; + private ArrayList feedItemsCenters; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_register); + + + edtFullname = (EditText) findViewById(R.id.input_fullname); + edtEmail = (EditText) findViewById(R.id.input_email); + edtMobile = (EditText) findViewById(R.id.input_mobile); + edtPassword = (EditText) findViewById(R.id.input_password); + edtCpassword = (EditText) findViewById(R.id.input_cpassword); + registerButtonAction = (Button) findViewById(R.id.btnRegister); + pBar = (ProgressBar) findViewById(R.id.progressBar2); + autocResidence = (AutoCompleteTextView) findViewById(R.id.autoc_area_of_residence); + csCenters = (Spinner) findViewById(R.id.spn_cs_center); + + //load location from server + if (ConnectionDetector + .isConnectingToInternet(RegisterActivity.this)) { + + loadLocations(); + + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, feedItems); + + autocResidence.setAdapter(adapter); + + } else { + Toast.makeText( + RegisterActivity.this, + getString(R.string.no_internet_msg), Toast.LENGTH_SHORT).show(); + } + + //init spinner with data + initSpinnerCSCenters(); + + + //onclick listeners + + //setting on click listener + csCenters.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + + String selectedItemText = (String) parent.getItemAtPosition(position); + + if (position > 0) { + // Notify the selected item text + TextView tv = (TextView) findViewById(R.id.spnTxt); + tv.setTextColor(Color.BLACK); + strCSCenter = selectedItemText; + + } + + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + + //on click listenere + registerButtonAction.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + + if (isValidation()) { + + if (ConnectionDetector + .isConnectingToInternet(RegisterActivity.this)) { + + new ExecuteUserRegistrationTask().execute(getString(R.string.register_user)); + + + } else { + Toast.makeText( + RegisterActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + + } else { + + } + } + + }); + + + } + + //functions + + //initialise spinner with data + public void initSpinnerCSCenters() { + + if (ConnectionDetector + .isConnectingToInternet(RegisterActivity.this)) { + + loadCenters(); + + + // Initializing an ArrayAdapter + final ArrayAdapter spinnerArrayAdapter = new ArrayAdapter( + this, R.layout.spinner_item_cs_center, feedItemsCenters) { + + + @Override + public boolean isEnabled(int position) { + + if (position == 0) { + // Disable the first item from Spinner + // First item will be use for hint + return false; + } else { + return true; + } + } + + @Override + public View getDropDownView(int position, View convertView, + ViewGroup parent) { + View view = super.getDropDownView(position, convertView, parent); + TextView tv = (TextView) view; + if (position == 0) { + // Set the hint text color gray + tv.setTextColor(Color.GRAY); + } else { + tv.setTextColor(Color.BLACK); + } + return view; + } + }; + + spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item_cs_center); + csCenters.setAdapter(spinnerArrayAdapter); + } else { + Toast.makeText( + RegisterActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + + + } + + //registration validation + public boolean isValidation() { + + if (!Universal.isEmpty(edtFullname)) { + edtFullname.setError("Please Enter Fullname"); + return false; + } + + if (!Universal.isValidEmail(edtEmail.getText() + .toString().trim())) { + edtEmail.setError("Please Enter Valid Email Id"); + return false; + } + + if (!Universal.isValidMobile(edtMobile.getText() + .toString().trim())) { + edtMobile.setError("Please Enter Valid Mobile No"); + return false; + } + + if (!Universal.isEmptyACT(autocResidence)) { + autocResidence.setError("Please Select Area of Residence"); + + return false; + } + + if (strCSCenter.equals("")) { + + TextView errorText = (TextView) csCenters.getSelectedView(); + errorText.setError("Please select nearest Chhote Scientists center"); + return false; + } + + //password valiadtion + if (!Universal.isEmpty(edtPassword)) { + edtPassword.setError("Please Enter Password"); + return false; + } + + if (!Universal.isEmpty(edtCpassword)) { + edtCpassword.setError("Please Enter Password"); + return false; + } + + if (!edtPassword.getText().toString().trim().equals(edtCpassword.getText().toString().trim())) { + edtPassword.setError("Password Mismatch"); + edtCpassword.setError("Password Mismatch"); + return false; + } + + + return true; + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } + + //api call to get updates + private void loadLocations() { + + feedItems = new ArrayList(); + // making fresh volley request and getting json + + pBar.setVisibility(View.VISIBLE); + + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_locations_url), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeed(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + feedItems.add(feedObj.getString("location_name")); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + RegisterActivity.this.runOnUiThread(new Runnable() { + + @Override + public void run() { + + + } + }); + } + }).start(); + + } + + //api call to get updates + private void loadCenters() { + + feedItemsCenters = new ArrayList(); + // making fresh volley request and getting json + feedItemsCenters.add(getString(R.string.select_center_msg)); + + pBar.setVisibility(View.VISIBLE); + + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_centers_url), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeedCenters(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeedCenters(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + feedItemsCenters.add(feedObj.getString("center_name")); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + RegisterActivity.this.runOnUiThread(new Runnable() { + + @Override + public void run() { + pBar.setVisibility(View.GONE); + + + } + }); + } + }).start(); + + } + + //api call to server + private class ExecuteUserRegistrationTask extends + AsyncTask { + + ProgressDialog mProgressDialog; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + mProgressDialog = new ProgressDialog( + RegisterActivity.this); + mProgressDialog.setMessage("Registering..."); + mProgressDialog.show(); + } + + + @Override + protected String doInBackground(String... params) { + + try { + + HttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(params[0]); + + List parameters = new ArrayList(2); + JSONObject jsonObject = new JSONObject(); + + //json packet + + jsonObject.put("user_fullname", edtFullname.getText().toString().trim()); + jsonObject.put("user_email", edtEmail.getText().toString().trim()); + jsonObject.put("user_mobile", edtMobile.getText().toString().trim()); + jsonObject.put("user_area_of_residence", autocResidence.getText().toString().trim()); + jsonObject.put("user_nearest_cs_center", strCSCenter); + jsonObject.put("user_password", edtPassword.getText().toString().trim()); + + parameters.add(new BasicNameValuePair("data", jsonObject + .toString())); + + Log.e("JSON Sent", jsonObject.toString()); + + httpPost.setEntity(new UrlEncodedFormEntity(parameters)); + HttpResponse httpResponse = httpClient.execute(httpPost); + + String responce = EntityUtils + .toString(httpResponse.getEntity()); + + Log.e("Server JOSN", responce); + + return responce; + } catch (JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + protected void onPostExecute(String data) { + Log.e("Server Response", data + "--"); + mProgressDialog.dismiss(); + String id = "0"; + if (data != null) { + JSONObject jsonObj; + try { + jsonObj = new JSONObject(data); + JSONObject jsonObj1 = jsonObj.getJSONObject("data"); + id = jsonObj1.getString("success"); + } catch (JSONException e) { + e.printStackTrace(); + } + + Log.v("Last ID", id); + if (id.equals("0")) { + mProgressDialog.dismiss(); + Toast.makeText(RegisterActivity.this, + "User Already Registered.", Toast.LENGTH_SHORT) + .show(); + + } else { + Toast.makeText(RegisterActivity.this, + "Registration Succseefully.", Toast.LENGTH_SHORT) + .show(); + RegisterActivity.this.finish(); + Intent i = new Intent(RegisterActivity.this, + LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + RegisterActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + RegisterActivity.this, i, bundle); + + } + } else { + Toast.makeText(RegisterActivity.this, + "Please try after sometime.", Toast.LENGTH_SHORT) + .show(); + + } + } + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/SplashActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/SplashActivity.java new file mode 100644 index 0000000..e283045 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/SplashActivity.java @@ -0,0 +1,271 @@ +package com.kpit.chhotescientists.activity; + +import android.content.ActivityNotFoundException; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.pojo.VersionCheckVO; +import com.kpit.chhotescientists.util.AppController; +import com.kpit.chhotescientists.util.ConnectionDetector; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Dnyaneshwar on 4/11/2016. + */ +public class SplashActivity extends AppCompatActivity { + + // Splash screen timer + private static final long SPLASH_TIME_OUT = 3000; + private MyPreferences mPreferences; + private List feedItems = new ArrayList<>(); + ProgressBar pBar; + int serverVersionCode; + int verCode; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_splash); + pBar = (ProgressBar) findViewById(R.id.progressBar); + mPreferences = new MyPreferences(this); + + + PackageInfo pInfo = null; + + try { + + pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); + + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + + String version = pInfo.versionName; + + verCode = pInfo.versionCode; + + Log.e("Version", version); + Log.e("Version Code", String.valueOf(verCode)); + +/* + new Handler().postDelayed(new Runnable() { + + @Override + public void run() { + + if (mPreferences.isFirstTimeLaunch()) { + + Log.e("Sigle Sign on", String.valueOf(mPreferences.isFirstTimeLaunch())); + + Intent i = new Intent(SplashActivity.this, LoginActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + SplashActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(SplashActivity.this, i, bundle); + + } else { + + Intent i = new Intent(SplashActivity.this, MainActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + SplashActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(SplashActivity.this, i, bundle); + + } + finish(); + } + }, SPLASH_TIME_OUT); +*/ + /* + Calendar c = Calendar.getInstance(); + System.out.println("Current time => " + c.getTime()); + + SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy"); + String formattedDate = df.format(c.getTime()); + + Log.e("Date", formattedDate); + */ + + vesionCheck(); + + + } + + //api call to get updates + private void vesionCheck() { + + feedItems = new ArrayList(); + // making fresh volley request and getting json + + pBar.setVisibility(View.VISIBLE); + if (ConnectionDetector + .isConnectingToInternet(SplashActivity.this)) { + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.version_check), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } else { + Toast.makeText( + SplashActivity.this, + getString(R.string.no_internet_msg), Toast.LENGTH_SHORT).show(); + } + } + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeed(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + serverVersionCode = Integer.parseInt(feedObj.getString("version")); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + SplashActivity.this.runOnUiThread(new Runnable() { + + @Override + public void run() { + + if (verCode == serverVersionCode) { + if (mPreferences.isFirstTimeLaunch()) { + + Log.e("Sigle Sign on", String.valueOf(mPreferences.isFirstTimeLaunch())); + + SplashActivity.this.finish(); + Intent i = new Intent(SplashActivity.this, + LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + SplashActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + SplashActivity.this, i, bundle); + + } else { + + SplashActivity.this.finish(); + Intent i = new Intent(SplashActivity.this, + MainActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + SplashActivity.this, + R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity( + SplashActivity.this, i, bundle); + + } + } else { + + + AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this); + builder.setMessage("Version Outdated,Update Your App") + .setCancelable(false) + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + //finish(); + //System.exit(0); + goToMyApp(true); + //finish(); + //System.exit(0); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + + } + + } + }); + } + }).start(); + + } + + public void goToMyApp(boolean googlePlay) { + try { + startActivity(new Intent(Intent.ACTION_VIEW, + Uri.parse((googlePlay ? "market://details?id=" + : "amzn://apps/android?p=") + getPackageName()))); + } catch (ActivityNotFoundException e1) { + try { + startActivity(new Intent( + Intent.ACTION_VIEW, + Uri.parse((googlePlay ? "https://play.google.com/store/apps/details?id=com.kpit.chhotescientists" + : "https://play.google.com/store/apps/details?id=com.kpit.chhotescientists") + + getPackageName()))); + } catch (ActivityNotFoundException e2) { + Toast.makeText(this, + "You don't have any app that can open this link", + Toast.LENGTH_SHORT).show(); + } + } + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + finish(); + System.exit(0); + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/UpdateDetailActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/UpdateDetailActivity.java new file mode 100644 index 0000000..0c6ad92 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/UpdateDetailActivity.java @@ -0,0 +1,129 @@ +package com.kpit.chhotescientists.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.TextView; + +import com.android.volley.toolbox.ImageLoader; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.custom.FeedImageView; +import com.kpit.chhotescientists.pojo.UpdatesVO; +import com.kpit.chhotescientists.util.AppController; + +/** + * Created by vb on 4/15/2016. + */ +public class UpdateDetailActivity extends AppCompatActivity { + + ImageLoader imageLoader = AppController.getInstance().getImageLoader(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_update_detail); + + getSupportActionBar().show(); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + + // 1. get passed intent + Intent intent = getIntent(); + + // 2. get person object from intent + final UpdatesVO item = (UpdatesVO) intent.getSerializableExtra("updateObj"); + + TextView txtHeading = (TextView) findViewById(R.id.update_heading); + TextView txtCategory = (TextView) findViewById(R.id.textView4); + TextView txtDescription = (TextView) findViewById(R.id.update_description); + + FeedImageView imgView = (FeedImageView) findViewById(R.id.update_image); + + txtHeading.setText(item.getUpdateHeading()); + setTitle(item.getUpdateHeading()); + txtCategory.setText(item.getUpdateDate()); + txtDescription.setText(item.getUpdateDescription()); + + if (item.getUpdateImage().isEmpty()) { + imgView.setVisibility(View.GONE); + } else { + imgView.setImageUrl(item.getUpdateImage(), imageLoader); + imgView.setVisibility(View.VISIBLE); + imgView + .setResponseObserver(new FeedImageView.ResponseObserver() { + @Override + public void onError() { + } + + @Override + public void onSuccess() { + } + }); + } + + imgView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + // String value = hiddenValue.getText().toString().trim(); + // Toast.makeText(getApplicationContext(), + // "HEllo : " + value, Toast.LENGTH_SHORT).show(); + + Intent intent = new Intent(UpdateDetailActivity.this, + com.kpit.chhotescientists.util.ActivityImage.class); + Bundle bundle1 = ActivityOptionsCompat.makeCustomAnimation( + UpdateDetailActivity.this, + R.anim.in_right_animation, R.anim.out_left_animation) + .toBundle(); + intent.putExtra("title", item.getUpdateHeading()); + intent.putExtra("image", item.getUpdateImage()); + ActivityCompat.startActivity(UpdateDetailActivity.this, + intent, bundle1); + } + }); + + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/activity/UpdateProfileActivity.java b/app/src/main/java/com/kpit/chhotescientists/activity/UpdateProfileActivity.java new file mode 100644 index 0000000..d00e735 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/activity/UpdateProfileActivity.java @@ -0,0 +1,500 @@ +package com.kpit.chhotescientists.activity; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.Color; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.util.AppController; +import com.kpit.chhotescientists.util.ConnectionDetector; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Dnyanesh on 4/17/2016. + */ +@SuppressWarnings("ALL") +public class UpdateProfileActivity extends AppCompatActivity { + + MyPreferences myPreferences; + + EditText edtFullname, edtMobile, edtEmail; + Button btnUpdate; + Spinner edtCenter; + AutoCompleteTextView edtResidence; + ProgressBar pBar; + String strCSCenter = ""; + JSONArray resAuth; + JSONArray user; + private ArrayList feedItems; + private ArrayList feedItemsCenters; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_edit_profile); + + //enable back button on action bar + getSupportActionBar().show(); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + myPreferences = new MyPreferences(this); + + btnUpdate = (Button) findViewById(R.id.btn_update_profile); + edtFullname = (EditText) findViewById(R.id.input_fullname); + edtMobile = (EditText) findViewById(R.id.input_mobile); + edtEmail = (EditText) findViewById(R.id.input_email); + edtResidence = (AutoCompleteTextView) findViewById(R.id.autoc_area_of_residence); + edtCenter = (Spinner) findViewById(R.id.spn_cs_center); + pBar = (ProgressBar) findViewById(R.id.progressBar2); + edtFullname.setText(myPreferences.getUserFullname()); + edtMobile.setText(myPreferences.getUserMobile()); + edtEmail.setText(myPreferences.getUserEmail()); + //edtResidence.setText(myPreferences.getUserResidence()); + //edtCenter.setText(myPreferences.getUserCenter()); + + + //load location from server + if (ConnectionDetector + .isConnectingToInternet(UpdateProfileActivity.this)) { + + loadLocations(); + + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, feedItems); + + edtResidence.setAdapter(adapter); + + } else { + Toast.makeText( + UpdateProfileActivity.this, + getString(R.string.no_internet_msg), Toast.LENGTH_SHORT).show(); + } +//init spinner with data + initSpinnerCSCenters(); + + + //onclick listeners + + //setting on click listener + edtCenter.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + + String selectedItemText = (String) parent.getItemAtPosition(position); + + if (position > 0) { + // Notify the selected item text + TextView tv = (TextView) findViewById(R.id.spnTxt); + tv.setTextColor(Color.BLACK); + strCSCenter = selectedItemText; + + } + + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + + btnUpdate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (ConnectionDetector + .isConnectingToInternet(UpdateProfileActivity.this)) { + + new ExecuteProfileUpdate().execute(getString(R.string.update_profile_url)); + + } else { + Toast.makeText( + UpdateProfileActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + } + }); + + + } + + //initialise spinner with data + public void initSpinnerCSCenters() { + + if (ConnectionDetector + .isConnectingToInternet(UpdateProfileActivity.this)) { + + loadCenters(); + + + // Initializing an ArrayAdapter + final ArrayAdapter spinnerArrayAdapter = new ArrayAdapter( + this, R.layout.spinner_item_cs_center, feedItemsCenters) { + + + @Override + public boolean isEnabled(int position) { + + if (position == 0) { + // Disable the first item from Spinner + // First item will be use for hint + return false; + } else { + return true; + } + } + + @Override + public View getDropDownView(int position, View convertView, + ViewGroup parent) { + View view = super.getDropDownView(position, convertView, parent); + TextView tv = (TextView) view; + if (position == 0) { + // Set the hint text color gray + tv.setTextColor(Color.GRAY); + } else { + tv.setTextColor(Color.BLACK); + } + return view; + } + }; + + spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item_cs_center); + edtCenter.setAdapter(spinnerArrayAdapter); + } else { + Toast.makeText( + UpdateProfileActivity.this, + getString(R.string.no_internet_msg), + Toast.LENGTH_SHORT).show(); + } + + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.change_password, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + + switch (item.getItemId()) { + + case android.R.id.home: + onBackPressed(); + break; + + case R.id.action_change_password: { + Intent i = new Intent(UpdateProfileActivity.this, ChangePasswordActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + UpdateProfileActivity.this, R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + ActivityCompat.startActivity(UpdateProfileActivity.this, i, bundle); + } + break; + default: + break; + } + return super.onOptionsItemSelected(item); + } + + + private void loadLocations() { + + feedItems = new ArrayList(); + // making fresh volley request and getting json + + pBar.setVisibility(View.VISIBLE); + + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_locations_url), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } + + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeed(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + feedItems.add(feedObj.getString("location_name")); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + UpdateProfileActivity.this.runOnUiThread(new Runnable() { + + @Override + public void run() { + + //pBar.setVisibility(View.GONE); + + } + }); + } + }).start(); + + } + + private void loadCenters() { + + feedItemsCenters = new ArrayList(); + // making fresh volley request and getting json + feedItemsCenters.add(getString(R.string.select_center_msg)); + + pBar.setVisibility(View.VISIBLE); + + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_centers_url), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeedCenters(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } + + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeedCenters(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + feedItemsCenters.add(feedObj.getString("center_name")); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + UpdateProfileActivity.this.runOnUiThread(new Runnable() { + + @Override + public void run() { + pBar.setVisibility(View.GONE); + + + } + }); + } + }).start(); + + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + + } + + private void SaveUserDataProfile(JSONObject response) { + try { + + JSONArray feedArray = response.getJSONArray("user"); + Log.e("Saving User Profile", response.toString()); + + JSONObject feedObj = (JSONObject) feedArray.get(0); + + myPreferences.setUserResidence(feedObj.getString("user_area_of_residence")); + myPreferences.setUserCenter(feedObj.getString("user_nearest_cs_center")); + + + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private class ExecuteProfileUpdate extends AsyncTask { + private ProgressDialog pDialog; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + // Showing progress dialog + pDialog = new ProgressDialog(UpdateProfileActivity.this); + pDialog.setMessage("Please wait..."); + pDialog.setCancelable(false); + pDialog.show(); + } + + @Override + protected String doInBackground(String... params) { + // Creating service handler class instance + try { + HttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(params[0]); + + List parameters = new ArrayList(2); + + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("user_id", myPreferences.getUserId()); + + jsonObject.put("user_area_of_residence", edtResidence.getText().toString().trim()); + jsonObject.put("user_nearest_cs_center", strCSCenter); + + parameters.add(new BasicNameValuePair("data", jsonObject + .toString())); + Log.e("JSON Sent", jsonObject.toString()); + httpPost.setEntity(new UrlEncodedFormEntity(parameters)); + HttpResponse httpResponse = httpClient.execute(httpPost); + + String responce = EntityUtils + .toString(httpResponse.getEntity()); + Log.e("Server JOSN", responce); + return responce; + } catch (JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + protected void onPostExecute(String response) { + Log.e("Server Response", response + "--"); + + int flag = 0; + JSONObject jsonObj = null; + try { + jsonObj = new JSONObject(response); + resAuth = jsonObj.getJSONArray("data"); + JSONObject feedObj = resAuth.getJSONObject(0); + flag = feedObj.getInt("success"); + Log.e("log in flag ", String.valueOf(flag)); + } catch (JSONException e) { + e.printStackTrace(); + } + + + if (flag != 0) { + + pDialog.dismiss(); + + SaveUserDataProfile(jsonObj); + + Toast.makeText(UpdateProfileActivity.this, + "Profile Update Successful.", Toast.LENGTH_SHORT) + .show(); + + } else { + pDialog.dismiss(); + Toast.makeText(UpdateProfileActivity.this, + "Profile Update Unsuccessful, Sorry for inconvience.", Toast.LENGTH_SHORT) + .show(); + + } + + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleCategoryAdapter.java b/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleCategoryAdapter.java new file mode 100644 index 0000000..48a81c0 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleCategoryAdapter.java @@ -0,0 +1,62 @@ +package com.kpit.chhotescientists.adapter; + + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.volley.toolbox.ImageLoader; +import com.android.volley.toolbox.NetworkImageView; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.custom.FeedImageView; +import com.kpit.chhotescientists.pojo.CategoryVO; +import com.kpit.chhotescientists.util.AppController; + +import java.util.List; + +public class CustomRecycleCategoryAdapter extends RecyclerView.Adapter { + + ImageLoader imageLoader = AppController.getInstance().getImageLoader(); + private List feeditems; + + public CustomRecycleCategoryAdapter(List feeditems) { + this.feeditems = feeditems; + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.grid_item_category, parent, false); + + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + CategoryVO item = feeditems.get(position); + holder.txtHeading.setText(item.getCatName()); + holder.txtcount.setText(item.getCatNotificationCount()); + holder.imgView.setImageUrl(item.getCatImage(), imageLoader); + } + + @Override + public int getItemCount() { + return feeditems.size(); + } + + public class MyViewHolder extends RecyclerView.ViewHolder { + + public TextView txtHeading, txtcount; + public NetworkImageView imgView; + + public MyViewHolder(View view) { + super(view); + + txtHeading = (TextView) view.findViewById(R.id.catname); + txtcount = (TextView) view.findViewById(R.id.count); + imgView = (NetworkImageView) view.findViewById(R.id.imageView); + } + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleExperimentAdapter.java b/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleExperimentAdapter.java new file mode 100644 index 0000000..6e44e88 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleExperimentAdapter.java @@ -0,0 +1,60 @@ +package com.kpit.chhotescientists.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.volley.toolbox.ImageLoader; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.custom.FeedImageView; +import com.kpit.chhotescientists.pojo.ExperimentVO; +import com.kpit.chhotescientists.util.AppController; + +import java.util.List; + +public class CustomRecycleExperimentAdapter extends RecyclerView.Adapter { + + ImageLoader imageLoader = AppController.getInstance().getImageLoader(); + private List feeditems; + + public CustomRecycleExperimentAdapter(List feeditems) { + this.feeditems = feeditems; + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.list_item_experiment, parent, false); + + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + ExperimentVO item = feeditems.get(position); + holder.txtHeading.setText(item.getExpname()); + holder.txtDescription.setText(item.getExpdescription()); + holder.imgView.setImageUrl(item.getExpimage(), imageLoader); + } + + @Override + public int getItemCount() { + return feeditems.size(); + } + + public class MyViewHolder extends RecyclerView.ViewHolder { + + public TextView txtHeading, txtDescription; + public FeedImageView imgView; + + public MyViewHolder(View view) { + super(view); + + txtHeading = (TextView) view.findViewById(R.id.exp_heading); + txtDescription = (TextView) view.findViewById(R.id.exp_description); + imgView = (FeedImageView) view.findViewById(R.id.exp_image); + } + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleUpdateAdapter.java b/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleUpdateAdapter.java new file mode 100644 index 0000000..d7e2a44 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/adapter/CustomRecycleUpdateAdapter.java @@ -0,0 +1,63 @@ +package com.kpit.chhotescientists.adapter; + + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.volley.toolbox.ImageLoader; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.custom.FeedImageView; +import com.kpit.chhotescientists.pojo.UpdatesVO; +import com.kpit.chhotescientists.util.AppController; + +import java.util.List; + +public class CustomRecycleUpdateAdapter extends RecyclerView.Adapter { + + ImageLoader imageLoader = AppController.getInstance().getImageLoader(); + private List feeditems; + + public CustomRecycleUpdateAdapter(List feeditems) { + this.feeditems = feeditems; + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.list_item_update, parent, false); + + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + UpdatesVO item = feeditems.get(position); + holder.txtHeading.setText(item.getUpdateHeading()); + holder.txtCategory.setText(item.getUpdateDate()); + holder.txtDescription.setText(item.getUpdateDescription()); + holder.imgView.setImageUrl(item.getUpdateImage(), imageLoader); + } + + @Override + public int getItemCount() { + return feeditems.size(); + } + + public class MyViewHolder extends RecyclerView.ViewHolder { + + public TextView txtHeading, txtCategory, txtDescription; + public FeedImageView imgView; + + public MyViewHolder(View view) { + super(view); + + txtHeading = (TextView) view.findViewById(R.id.update_heading); + txtCategory = (TextView) view.findViewById(R.id.update_category); + txtDescription = (TextView) view.findViewById(R.id.update_description); + imgView = (FeedImageView) view.findViewById(R.id.update_image); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/common/MyPreferences.java b/app/src/main/java/com/kpit/chhotescientists/common/MyPreferences.java new file mode 100644 index 0000000..d0006a5 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/common/MyPreferences.java @@ -0,0 +1,125 @@ +package com.kpit.chhotescientists.common; + + +import android.content.Context; +import android.content.SharedPreferences; + +/** + * Created by Dnyaneshwar on 11/19/15. + */ + +public class MyPreferences { + + private static final String PREFERENCES_NAME = "chhotescientists_preferences"; + private static final String IS_FIRST_LAUNCH = "isFirstTimeLaunchPref"; + private static final String IS_LOGGED_IN = "isLoggedInPref"; + private static final String USER_ID = "user_id"; + private static final String USER_FULLNAME = "user_fullname"; + private static final String USER_EMAIL = "user_email"; + private static final String USER_MOBILE = "user_mobile"; + private static final String USER_RESIDENCE = "user_area_of_residence"; + private static final String USER_CENTER = "user_nearest_cs_center"; + private static final String USER_NAME = "userNamePref"; + private Context context; + private SharedPreferences preferences; + private SharedPreferences.Editor editor; + + public MyPreferences(Context context) { + this.context = context; + preferences = this.context.getSharedPreferences(PREFERENCES_NAME, + Context.MODE_PRIVATE); + editor = preferences.edit(); + editor.commit(); + } + + public boolean isFirstTimeLaunch() { + return preferences.getBoolean(IS_FIRST_LAUNCH, true); + } + + public void setFirstTimeLaunch(boolean isFirstTimeLaunch) { + editor.putBoolean(IS_FIRST_LAUNCH, isFirstTimeLaunch); + editor.commit(); + } + + public boolean isLoggedIn() { + return preferences.getBoolean(IS_LOGGED_IN, false); + } + + public void setLoggedIn(boolean isLoggedIn) { + editor.putBoolean(IS_LOGGED_IN, isLoggedIn); + editor.commit(); + } + + //getters and setters method + + //user id + public String getUserId() { + return preferences.getString(USER_ID, ""); + } + + public void setUserId(String userId) { + editor.putString(USER_ID, userId); + editor.commit(); + } + + //user firstname + public String getUserFullname() { + return preferences.getString(USER_FULLNAME, ""); + } + + public void setUserFullname(String fullname) { + editor.putString(USER_FULLNAME, fullname); + editor.commit(); + } + + //user email + public String getUserEmail() { + return preferences.getString(USER_EMAIL, ""); + } + + public void setUserEmail(String email) { + editor.putString(USER_EMAIL, email); + editor.commit(); + } + + //user mobile + public String getUserMobile() { + return preferences.getString(USER_MOBILE, ""); + } + + public void setUserMobile(String mobile) { + editor.putString(USER_MOBILE, mobile); + editor.commit(); + } + + //username + + public String getUserName() { + return preferences.getString(USER_NAME, ""); + } + + public void setUserName(String userName) { + editor.putString(USER_NAME, userName); + editor.commit(); + } + + public String getUserResidence() { + return preferences.getString(USER_RESIDENCE, ""); + } + + //user area of residene + public void setUserResidence(String residence) { + editor.putString(USER_RESIDENCE, residence); + editor.commit(); + } + + public String getUserCenter() { + return preferences.getString(USER_CENTER, ""); + } + + //user nearest chhote scientists center + public void setUserCenter(String center) { + editor.putString(USER_CENTER, center); + editor.commit(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/custom/DividerItemDecoration.java b/app/src/main/java/com/kpit/chhotescientists/custom/DividerItemDecoration.java new file mode 100644 index 0000000..0500d80 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/custom/DividerItemDecoration.java @@ -0,0 +1,92 @@ +package com.kpit.chhotescientists.custom; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by Lincoln on 30/10/15. + */ +@SuppressWarnings("ALL") +public class DividerItemDecoration extends RecyclerView.ItemDecoration { + + public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; + public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; + private static final int[] ATTRS = new int[]{ + android.R.attr.listDivider + }; + private Drawable mDivider; + + private int mOrientation; + + + public DividerItemDecoration(Context context, int orientation) { + final TypedArray a = context.obtainStyledAttributes(ATTRS); + mDivider = a.getDrawable(0); + a.recycle(); + setOrientation(orientation); + } + + public void setOrientation(int orientation) { + if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { + throw new IllegalArgumentException("invalid orientation"); + } + mOrientation = orientation; + } + + @Override + public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { + if (mOrientation == VERTICAL_LIST) { + //drawVertical(c, parent); + } else { + //drawHorizontal(c, parent); + } + } + + public void drawVertical(Canvas c, RecyclerView parent) { + final int left = parent.getPaddingLeft(); + final int right = parent.getWidth() - parent.getPaddingRight(); + + final int childCount = parent.getChildCount(); + + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + final int top = child.getBottom() + params.bottomMargin; + final int bottom = top + mDivider.getIntrinsicHeight(); + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + } + + public void drawHorizontal(Canvas c, RecyclerView parent) { + final int top = parent.getPaddingTop(); + final int bottom = parent.getHeight() - parent.getPaddingBottom(); + + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + final int left = child.getRight() + params.rightMargin; + final int right = left + mDivider.getIntrinsicHeight(); + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + if (mOrientation == VERTICAL_LIST) { + outRect.set(0, 0, 0, 0); + } else { + outRect.set(0, 0, 0, 0); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/custom/FeedImageView.java b/app/src/main/java/com/kpit/chhotescientists/custom/FeedImageView.java new file mode 100644 index 0000000..53a1aa3 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/custom/FeedImageView.java @@ -0,0 +1,250 @@ +package com.kpit.chhotescientists.custom; + +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; + +import com.android.volley.VolleyError; +import com.android.volley.toolbox.ImageLoader; +import com.android.volley.toolbox.ImageLoader.ImageContainer; +import com.android.volley.toolbox.ImageLoader.ImageListener; + +public class FeedImageView extends ImageView { + + private ResponseObserver mObserver; + /** + * The URL of the network image to load + */ + private String mUrl; + /** + * Resource ID of the image to be used as a placeholder until the network + * image is loaded. + */ + private int mDefaultImageId; + /** + * Resource ID of the image to be used if the network response fails. + */ + private int mErrorImageId; + /** + * Local copy of the ImageLoader. + */ + private ImageLoader mImageLoader; + /** + * Current ImageContainer. (either in-flight or finished) + */ + private ImageContainer mImageContainer; + + public FeedImageView(Context context) { + this(context, null); + } + + public FeedImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public FeedImageView(Context context, AttributeSet attrs, + int defStyle) { + super(context, attrs, defStyle); + } + + public void setResponseObserver(ResponseObserver observer) { + mObserver = observer; + } + + /** + * Sets URL of the image that should be loaded into this view. Note that + * calling this will immediately either set the cached image (if available) + * or the default image specified by + * + * @param url The URL that should be loaded into this ImageView. + * @param imageLoader ImageLoader that will be used to make the request. + */ + public void setImageUrl(String url, ImageLoader imageLoader) { + mUrl = url; + mImageLoader = imageLoader; + // The URL has potentially changed. See if we need to load it. + loadImageIfNecessary(false); + } + + /** + * Sets the default image resource ID to be used for this view until the + * attempt to load it completes. + */ + public void setDefaultImageResId(int defaultImage) { + mDefaultImageId = defaultImage; + } + + /** + * Sets the error image resource ID to be used for this view in the event + * that the image requested fails to load. + */ + public void setErrorImageResId(int errorImage) { + mErrorImageId = errorImage; + } + + /** + * Loads the image for the view if it isn't already loaded. + * + * @param isInLayoutPass True if this was invoked from a layout pass, false otherwise. + */ + private void loadImageIfNecessary(final boolean isInLayoutPass) { + final int width = getWidth(); + int height = getHeight(); + + boolean isFullyWrapContent = getLayoutParams() != null + && getLayoutParams().height == LayoutParams.WRAP_CONTENT + && getLayoutParams().width == LayoutParams.WRAP_CONTENT; + // if the view's bounds aren't known yet, and this is not a + // wrap-content/wrap-content + // view, hold off on loading the image. + if (width == 0 && height == 0 && !isFullyWrapContent) { + return; + } + + // if the URL to be loaded in this view is empty, cancel any old + // requests and clear the + // currently loaded image. + if (TextUtils.isEmpty(mUrl)) { + if (mImageContainer != null) { + mImageContainer.cancelRequest(); + mImageContainer = null; + } + setDefaultImageOrNull(); + return; + } + + // if there was an old request in this view, check if it needs to be + // canceled. + if (mImageContainer != null && mImageContainer.getRequestUrl() != null) { + if (mImageContainer.getRequestUrl().equals(mUrl)) { + // if the request is from the same URL, return. + return; + } else { + // if there is a pre-existing request, cancel it if it's + // fetching a different URL. + mImageContainer.cancelRequest(); + setDefaultImageOrNull(); + } + } + + // The pre-existing content of this view didn't match the current URL. + // Load the new image + // from the network. + ImageContainer newContainer = mImageLoader.get(mUrl, + new ImageListener() { + @Override + public void onErrorResponse(VolleyError error) { + if (mErrorImageId != 0) { + setImageResource(mErrorImageId); + } + + if (mObserver != null) { + mObserver.onError(); + } + } + + @Override + public void onResponse(final ImageContainer response, + boolean isImmediate) { + // If this was an immediate response that was delivered + // inside of a layout + // pass do not set the image immediately as it will + // trigger a requestLayout + // inside of a layout. Instead, defer setting the image + // by posting back to + // the main thread. + if (isImmediate && isInLayoutPass) { + post(new Runnable() { + @Override + public void run() { + onResponse(response, false); + } + }); + return; + } + + int bWidth = 0, bHeight = 0; + if (response.getBitmap() != null) { + + setImageBitmap(response.getBitmap()); + bWidth = response.getBitmap().getWidth(); + bHeight = response.getBitmap().getHeight(); + adjustImageAspect(bWidth, bHeight); + + } else if (mDefaultImageId != 0) { + setImageResource(mDefaultImageId); + } + + if (mObserver != null) { + mObserver.onSuccess(); + + } + } + }); + + // update the ImageContainer to be the new bitmap container. + mImageContainer = newContainer; + + } + + private void setDefaultImageOrNull() { + if (mDefaultImageId != 0) { + setImageResource(mDefaultImageId); + } else { + setImageBitmap(null); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, + int bottom) { + super.onLayout(changed, left, top, right, bottom); + loadImageIfNecessary(true); + } + + @Override + protected void onDetachedFromWindow() { + if (mImageContainer != null) { + // If the view was bound to an image request, cancel it and clear + // out the image from the view. + mImageContainer.cancelRequest(); + setImageBitmap(null); + // also clear out the container so we can reload the image if + // necessary. + mImageContainer = null; + } + super.onDetachedFromWindow(); + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + invalidate(); + } + + /* + * Adjusting imageview height + * */ + private void adjustImageAspect(int bWidth, int bHeight) { + LinearLayout.LayoutParams params = (LayoutParams) getLayoutParams(); + + if (bWidth == 0 || bHeight == 0) + return; + + int swidth = getWidth(); + int new_height = 0; + new_height = swidth * bHeight / bWidth; + params.width = swidth; + params.height = new_height; + setLayoutParams(params); + } + + public interface ResponseObserver { + public void onError(); + + public void onSuccess(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/fragment/ExperimentsFragment.java b/app/src/main/java/com/kpit/chhotescientists/fragment/ExperimentsFragment.java new file mode 100644 index 0000000..249673b --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/fragment/ExperimentsFragment.java @@ -0,0 +1,295 @@ +package com.kpit.chhotescientists.fragment; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.app.Fragment; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.GestureDetector; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.activity.ExperimentViewActivity; +import com.kpit.chhotescientists.activity.UpdateDetailActivity; +import com.kpit.chhotescientists.adapter.CustomRecycleCategoryAdapter; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.custom.DividerItemDecoration; +import com.kpit.chhotescientists.pojo.CategoryVO; +import com.kpit.chhotescientists.pojo.UpdatesVO; +import com.kpit.chhotescientists.util.AppController; +import com.kpit.chhotescientists.util.ConnectionDetector; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +/** + * Created by vb on 4/11/2016. + */ +@SuppressWarnings("ALL") +public class ExperimentsFragment extends Fragment implements + SwipeRefreshLayout.OnRefreshListener { + + View v; + MyPreferences myPreferences; + CustomRecycleCategoryAdapter mAdapter; + //GridView listView; + SwipeRefreshLayout mSwipeLayout; + ProgressBar pBar; + private ArrayList feedItems; + private RecyclerView recyclerView; + TextView txtNoNWMessage; + private GridLayoutManager lLayout; + + public ExperimentsFragment() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + v = inflater.inflate(R.layout.fragment_experiments, container, false); + + //listView = (GridView) v.findViewById(R.id.gridView); + pBar = (ProgressBar) v.findViewById(R.id.progressBar2); + txtNoNWMessage = (TextView) v.findViewById(R.id.textView); + mSwipeLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_container); + mSwipeLayout.setOnRefreshListener(this); + mSwipeLayout.setColorSchemeResources(android.R.color.holo_blue_bright, + android.R.color.holo_green_light, + android.R.color.holo_orange_light, + android.R.color.holo_red_light); + recyclerView = (RecyclerView) v.findViewById(R.id.recycler_view); + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setRetainInstance(true); + + lLayout = new GridLayoutManager(getActivity(), 3); + + loadUpdates(); + + recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { + @Override + public void onClick(View view, int position) { + + CategoryVO item = feedItems.get(position); + + Intent i = new Intent(getActivity(), + ExperimentViewActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + getActivity(), R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + + i.putExtra("categoryObj", item); + + ActivityCompat.startActivity(getActivity(), i, bundle); + + } + + @Override + public void onLongClick(View view, int position) { + + } + })); + + + } + + //api call to get updates + public void loadUpdates() { + + recyclerView.setVisibility(View.VISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + //txtNoNWMessage.setText("No data to display."); + txtNoNWMessage.setVisibility(View.GONE); + + feedItems = new ArrayList(); + mAdapter = new CustomRecycleCategoryAdapter(feedItems); + +/* + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setAdapter(mAdapter); + */ + + recyclerView.setHasFixedSize(true); + recyclerView.setLayoutManager(lLayout); + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setAdapter(mAdapter); + + if (!mSwipeLayout.isRefreshing()) + pBar.setVisibility(View.VISIBLE); + + if (ConnectionDetector.isConnectingToInternet(getActivity())) { + + // making fresh volley request and getting json + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_update_category), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } else { + + //listView.setVisibility(View.INVISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + txtNoNWMessage.setText("No data to display."); + txtNoNWMessage.setVisibility(View.VISIBLE); + + } + + } + + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + + private void parseJsonFeed(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + CategoryVO item = new CategoryVO(); + + item.setCatID(feedObj.getString("cat_id")); + item.setCatName(feedObj.getString("cat_name")); + item.setCatDesc(feedObj.getString("cat_description")); + item.setCatImage(feedObj.getString("cat_image")); + item.setCatNotificationCount(feedObj.getString("cat_no_of_experiments")); + + feedItems.add(item); + //adapter.notifyDataSetChanged(); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + getActivity().runOnUiThread(new Runnable() { + + @Override + public void run() { + pBar.setVisibility(View.GONE); + mSwipeLayout.setRefreshing(false); + mAdapter.notifyDataSetChanged(); + } + }); + } + }).start(); + + } + + @Override + public void onRefresh() { + + loadUpdates(); + + } + public interface ClickListener { + void onClick(View view, int position); + + void onLongClick(View view, int position); + } + + public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { + + private GestureDetector gestureDetector; + private ExperimentsFragment.ClickListener clickListener; + + public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ExperimentsFragment.ClickListener clickListener) { + this.clickListener = clickListener; + gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + + @Override + public void onLongPress(MotionEvent e) { + View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); + if (child != null && clickListener != null) { + clickListener.onLongClick(child, recyclerView.getChildPosition(child)); + } + } + }); + } + + @Override + public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { + + View child = rv.findChildViewUnder(e.getX(), e.getY()); + if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { + clickListener.onClick(child, rv.getChildPosition(child)); + } + return false; + } + + @Override + public void onTouchEvent(RecyclerView rv, MotionEvent e) { + } + + @Override + public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { + + } + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/fragment/UpdateFragment.java b/app/src/main/java/com/kpit/chhotescientists/fragment/UpdateFragment.java new file mode 100644 index 0000000..1bf7249 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/fragment/UpdateFragment.java @@ -0,0 +1,289 @@ +package com.kpit.chhotescientists.fragment; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.ActivityOptionsCompat; +import android.support.v4.app.Fragment; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.GestureDetector; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.kpit.chhotescientists.R; +import com.kpit.chhotescientists.activity.UpdateDetailActivity; +import com.kpit.chhotescientists.adapter.CustomRecycleUpdateAdapter; +import com.kpit.chhotescientists.common.MyPreferences; +import com.kpit.chhotescientists.custom.DividerItemDecoration; +import com.kpit.chhotescientists.pojo.UpdatesVO; +import com.kpit.chhotescientists.util.AppController; +import com.kpit.chhotescientists.util.ConnectionDetector; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vb on 4/11/2016. + */ +@SuppressWarnings("ALL") +public class UpdateFragment extends Fragment implements + SwipeRefreshLayout.OnRefreshListener { + + View v; + MyPreferences myPreferences; + //private ArrayList feedItems; + ListView listView; + SwipeRefreshLayout mSwipeLayout; + ProgressBar pBar; + TextView txtNoNWMessage; + private List feedItems = new ArrayList<>(); + private RecyclerView recyclerView; + private CustomRecycleUpdateAdapter mAdapter; + + public UpdateFragment() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + v = inflater.inflate(R.layout.fragment_update, container, false); + + //listView = (ListView) v.findViewById(R.id.listView); + pBar = (ProgressBar) v.findViewById(R.id.progressBar2); + txtNoNWMessage = (TextView) v.findViewById(R.id.textView); + mSwipeLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_container); + mSwipeLayout.setOnRefreshListener(this); + mSwipeLayout.setColorSchemeResources(android.R.color.holo_blue_bright, + android.R.color.holo_green_light, + android.R.color.holo_orange_light, + android.R.color.holo_red_light); + + recyclerView = (RecyclerView) v.findViewById(R.id.recycler_view); + + + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setRetainInstance(true); + + loadUpdates(); + + recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { + @Override + public void onClick(View view, int position) { + UpdatesVO item = feedItems.get(position); + + Intent i = new Intent(getActivity(), + UpdateDetailActivity.class); + Bundle bundle = ActivityOptionsCompat.makeCustomAnimation( + getActivity(), R.anim.in_right_animation, + R.anim.out_left_animation).toBundle(); + + i.putExtra("updateObj", item); + + ActivityCompat.startActivity(getActivity(), i, bundle); + + } + + @Override + public void onLongClick(View view, int position) { + + } + })); + + + } + + //api call to get updates + private void loadUpdates() { + + recyclerView.setVisibility(View.VISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + //txtNoNWMessage.setText("No data to display."); + txtNoNWMessage.setVisibility(View.GONE); + + feedItems = new ArrayList(); + mAdapter = new CustomRecycleUpdateAdapter(feedItems); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); + recyclerView.setLayoutManager(mLayoutManager); + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setAdapter(mAdapter); + + if (!mSwipeLayout.isRefreshing()) + pBar.setVisibility(View.VISIBLE); + + if (ConnectionDetector.isConnectingToInternet(getActivity())) { + // making fresh volley request and getting json + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, getString(R.string.get_updates), null, new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + // VolleyLog.d(TAG, + // "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // VolleyLog.d(TAG, "Error: " + + // error.getMessage()); + + recyclerView.setVisibility(View.INVISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + txtNoNWMessage.setText("Error occured.Please try after sometime"); + txtNoNWMessage.setVisibility(View.VISIBLE); + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } else { + recyclerView.setVisibility(View.INVISIBLE); + pBar.setVisibility(View.INVISIBLE); + mSwipeLayout.setRefreshing(false); + txtNoNWMessage.setText("No data to display."); + txtNoNWMessage.setVisibility(View.VISIBLE); + } + } + + + /** + * Parsing json reponse and passing the data to feed view list adapter + */ + private void parseJsonFeed(final JSONObject response) { + Log.e("###", response.toString()); + new Thread(new Runnable() { + + @Override + public void run() { + + try { + JSONArray feedArray = response.getJSONArray("data"); + + for (int i = 0; i < feedArray.length(); i++) { + + JSONObject feedObj = (JSONObject) feedArray.get(i); + + UpdatesVO item = new UpdatesVO(); + + item.setUpdateID(feedObj.getString("update_id")); + item.setUpdateHeading(feedObj.getString("update_heading")); + item.setUpdateDescription(feedObj.getString("update_description")); + + item.setUpdateImage(feedObj.getString("update_image")); + + item.setUpdateDate(feedObj.getString("update_date")); + item.setUpdateTimestamp(feedObj.getString("timestamp")); + + feedItems.add(item); + //adapter.notifyDataSetChanged(); + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + getActivity().runOnUiThread(new Runnable() { + + @Override + public void run() { + pBar.setVisibility(View.GONE); + mSwipeLayout.setRefreshing(false); + mAdapter.notifyDataSetChanged(); + } + }); + } + }).start(); + + } + + @Override + public void onRefresh() { + + loadUpdates(); + } + + public interface ClickListener { + void onClick(View view, int position); + + void onLongClick(View view, int position); + } + + public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { + + private GestureDetector gestureDetector; + private UpdateFragment.ClickListener clickListener; + + public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final UpdateFragment.ClickListener clickListener) { + this.clickListener = clickListener; + gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + + @Override + public void onLongPress(MotionEvent e) { + View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); + if (child != null && clickListener != null) { + clickListener.onLongClick(child, recyclerView.getChildPosition(child)); + } + } + }); + } + + @Override + public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { + + View child = rv.findChildViewUnder(e.getX(), e.getY()); + if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { + clickListener.onClick(child, rv.getChildPosition(child)); + } + return false; + } + + @Override + public void onTouchEvent(RecyclerView rv, MotionEvent e) { + } + + @Override + public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/pojo/CategoryVO.java b/app/src/main/java/com/kpit/chhotescientists/pojo/CategoryVO.java new file mode 100644 index 0000000..5c11465 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/pojo/CategoryVO.java @@ -0,0 +1,63 @@ +package com.kpit.chhotescientists.pojo; + +import java.io.Serializable; + +/** + * Created by Dnyanesh on 3/22/2016. + */ +public class CategoryVO implements Serializable { + + String catID, catName, catDesc, catNotificationCount, catImage; + + public CategoryVO() { + + } + + public CategoryVO(String catID, String catName, String catDesc, String catNotificationCount, String catImage) { + this.catID = catID; + this.catName = catName; + this.catDesc = catDesc; + this.catNotificationCount = catNotificationCount; + this.catImage = catImage; + } + + public String getCatID() { + return catID; + } + + public void setCatID(String catID) { + this.catID = catID; + } + + public String getCatName() { + return catName; + } + + public void setCatName(String catName) { + this.catName = catName; + } + + public String getCatDesc() { + return catDesc; + } + + public void setCatDesc(String catDesc) { + this.catDesc = catDesc; + } + + public String getCatNotificationCount() { + return catNotificationCount; + } + + public void setCatNotificationCount(String catNotificationCount) { + this.catNotificationCount = catNotificationCount; + } + + public String getCatImage() { + return catImage; + } + + public void setCatImage(String catImage) { + this.catImage = catImage; + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/pojo/ExperimentVO.java b/app/src/main/java/com/kpit/chhotescientists/pojo/ExperimentVO.java new file mode 100644 index 0000000..bbeebd6 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/pojo/ExperimentVO.java @@ -0,0 +1,82 @@ +package com.kpit.chhotescientists.pojo; + +import java.io.Serializable; + +/** + * Created by VB on 4/19/2016. + */ +public class ExperimentVO implements Serializable { + + String expid, expname, expdescription, expimage, expcat, expVideoURL, expPDFUrl; + + public ExperimentVO() { + + } + + public ExperimentVO(String expid, String expname, String expdescription, String expimage, String expcat, String expVideoURL, String expPDFUrl) { + this.expid = expid; + this.expname = expname; + this.expdescription = expdescription; + this.expimage = expimage; + this.expcat = expcat; + this.expVideoURL = expVideoURL; + this.expPDFUrl = expPDFUrl; + + } + + public String getExpVideoURL() { + return expVideoURL; + } + + public void setExpVideoURL(String expVideoURL) { + this.expVideoURL = expVideoURL; + } + + public String getExpPDFUrl() { + return expPDFUrl; + } + + public void setExpPDFUrl(String expPDFUrl) { + this.expPDFUrl = expPDFUrl; + } + + public String getExpcat() { + return expcat; + } + + public void setExpcat(String expcat) { + this.expcat = expcat; + } + + public String getExpid() { + return expid; + } + + public void setExpid(String expid) { + this.expid = expid; + } + + public String getExpname() { + return expname; + } + + public void setExpname(String expname) { + this.expname = expname; + } + + public String getExpdescription() { + return expdescription; + } + + public void setExpdescription(String expdescription) { + this.expdescription = expdescription; + } + + public String getExpimage() { + return expimage; + } + + public void setExpimage(String expimage) { + this.expimage = expimage; + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/pojo/UpdatesVO.java b/app/src/main/java/com/kpit/chhotescientists/pojo/UpdatesVO.java new file mode 100644 index 0000000..79aad85 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/pojo/UpdatesVO.java @@ -0,0 +1,70 @@ +package com.kpit.chhotescientists.pojo; + +import java.io.Serializable; + +/** + * Created by dnyaneshwarkanpurne on 3/17/16. + */ +public class UpdatesVO implements Serializable { + String updateID, updateHeading, updateDescription, updateImage, updateDate, updateTimestamp; + + public UpdatesVO() { + } + + public UpdatesVO(String updateID, String updateHeading, String updateDescription, String updateImage, String updateDate, String updateTimestamp) { + this.updateID = updateID; + this.updateHeading = updateHeading; + this.updateDescription = updateDescription; + this.updateImage = updateImage; + this.updateDate = updateDate; + this.updateTimestamp = updateTimestamp; + } + + public String getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(String updateDate) { + this.updateDate = updateDate; + } + + public String getUpdateTimestamp() { + return updateTimestamp; + } + + public void setUpdateTimestamp(String updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + + public String getUpdateID() { + return updateID; + } + + public void setUpdateID(String updateID) { + this.updateID = updateID; + } + + public String getUpdateHeading() { + return updateHeading; + } + + public void setUpdateHeading(String updateHeading) { + this.updateHeading = updateHeading; + } + + public String getUpdateDescription() { + return updateDescription; + } + + public void setUpdateDescription(String updateDescription) { + this.updateDescription = updateDescription; + } + + public String getUpdateImage() { + return updateImage; + } + + public void setUpdateImage(String updateImage) { + this.updateImage = updateImage; + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/pojo/VersionCheckVO.java b/app/src/main/java/com/kpit/chhotescientists/pojo/VersionCheckVO.java new file mode 100644 index 0000000..5a182b2 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/pojo/VersionCheckVO.java @@ -0,0 +1,35 @@ +package com.kpit.chhotescientists.pojo; + +import java.io.Serializable; + +/** + * Created by VB on 4/21/2016. + */ +public class VersionCheckVO implements Serializable { + + String version, mendatory; + + public VersionCheckVO() { + } + + public VersionCheckVO(String version, String mendatory) { + this.version = version; + this.mendatory = mendatory; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getMendatory() { + return mendatory; + } + + public void setMendatory(String mendatory) { + this.mendatory = mendatory; + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/util/ActivityImage.java b/app/src/main/java/com/kpit/chhotescientists/util/ActivityImage.java new file mode 100644 index 0000000..5560be9 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/util/ActivityImage.java @@ -0,0 +1,56 @@ +package com.kpit.chhotescientists.util; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.MenuItem; +import android.widget.ProgressBar; + +import com.android.volley.toolbox.ImageLoader; +import com.kpit.chhotescientists.R; + +public class ActivityImage extends AppCompatActivity { + + private Context mContext; + private TouchImageView iv; + private ProgressBar pbar; + private ImageLoader imageLoader = AppController.getInstance() + .getImageLoader(); + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_zoom); + mContext = this; + pbar = (ProgressBar) findViewById(R.id.pbarImage); + iv = (TouchImageView) findViewById(R.id.ivImageTouch); + String title = getIntent().getStringExtra("title"); + String url = getIntent().getStringExtra("image"); + getSupportActionBar().setHomeButtonEnabled(true); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setTitle(title); + Log.e("ZoomURL", url); + iv.setImageUrl(url, imageLoader); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + break; + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.in_left_animation, + R.anim.out_right_animation); + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/util/AppController.java b/app/src/main/java/com/kpit/chhotescientists/util/AppController.java new file mode 100644 index 0000000..4f178a6 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/util/AppController.java @@ -0,0 +1,68 @@ +package com.kpit.chhotescientists.util; + +import android.app.Application; +import android.text.TextUtils; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.toolbox.ImageLoader; +import com.android.volley.toolbox.Volley; + +public class AppController extends Application { + + public static final String TAG = AppController.class.getSimpleName(); + private static AppController mInstance; + LruBitmapCache mLruBitmapCache; + private RequestQueue mRequestQueue; + private ImageLoader mImageLoader; + + public static synchronized AppController getInstance() { + return mInstance; + } + + @Override + public void onCreate() { + super.onCreate(); + mInstance = this; + } + + public RequestQueue getRequestQueue() { + if (mRequestQueue == null) { + mRequestQueue = Volley.newRequestQueue(getApplicationContext()); + } + + return mRequestQueue; + } + + public ImageLoader getImageLoader() { + getRequestQueue(); + if (mImageLoader == null) { + getLruBitmapCache(); + mImageLoader = new ImageLoader(this.mRequestQueue, mLruBitmapCache); + } + + return this.mImageLoader; + } + + public LruBitmapCache getLruBitmapCache() { + if (mLruBitmapCache == null) + mLruBitmapCache = new LruBitmapCache(); + return this.mLruBitmapCache; + } + + public void addToRequestQueue(Request req, String tag) { + req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); + getRequestQueue().add(req); + } + + public void addToRequestQueue(Request req) { + req.setTag(TAG); + getRequestQueue().add(req); + } + + public void cancelPendingRequests(Object tag) { + if (mRequestQueue != null) { + mRequestQueue.cancelAll(tag); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/util/ConnectionDetector.java b/app/src/main/java/com/kpit/chhotescientists/util/ConnectionDetector.java new file mode 100644 index 0000000..cbc9653 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/util/ConnectionDetector.java @@ -0,0 +1,18 @@ +package com.kpit.chhotescientists.util; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +/** + * Created by DNYANESHWAR on 11/7/2015. + */ +public class ConnectionDetector { + + public static boolean isConnectingToInternet(Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + return networkInfo != null && networkInfo.isConnected(); + } +} diff --git a/app/src/main/java/com/kpit/chhotescientists/util/LruBitmapCache.java b/app/src/main/java/com/kpit/chhotescientists/util/LruBitmapCache.java new file mode 100644 index 0000000..2500bb3 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/util/LruBitmapCache.java @@ -0,0 +1,39 @@ +package com.kpit.chhotescientists.util; + +import android.graphics.Bitmap; +import android.support.v4.util.LruCache; + +import com.android.volley.toolbox.ImageLoader; + +public class LruBitmapCache extends LruCache implements + ImageLoader.ImageCache { + public LruBitmapCache() { + this(getDefaultLruCacheSize()); + } + + public LruBitmapCache(int sizeInKiloBytes) { + super(sizeInKiloBytes); + } + + public static int getDefaultLruCacheSize() { + final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); + final int cacheSize = maxMemory / 8; + + return cacheSize; + } + + @Override + protected int sizeOf(String key, Bitmap value) { + return value.getRowBytes() * value.getHeight() / 1024; + } + + @Override + public Bitmap getBitmap(String url) { + return get(url); + } + + @Override + public void putBitmap(String url, Bitmap bitmap) { + put(url, bitmap); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/util/TouchImageView.java b/app/src/main/java/com/kpit/chhotescientists/util/TouchImageView.java new file mode 100644 index 0000000..3cfd808 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/util/TouchImageView.java @@ -0,0 +1,232 @@ +package com.kpit.chhotescientists.util; + +import android.content.Context; +import android.graphics.Matrix; +import android.graphics.PointF; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; + +import com.android.volley.toolbox.NetworkImageView; + +public class TouchImageView extends NetworkImageView { + + // We can be in one of these 3 states + static final int NONE = 0; + static final int DRAG = 1; + static final int ZOOM = 2; + static final int CLICK = 3; + protected float origWidth, origHeight; + Matrix matrix; + int mode = NONE; + // Remember some things for zooming + PointF last = new PointF(); + PointF start = new PointF(); + float minScale = 1f; + float maxScale = 3f; + float[] m; + int viewWidth, viewHeight; + float saveScale = 1f; + int oldMeasuredWidth, oldMeasuredHeight; + + ScaleGestureDetector mScaleDetector; + + Context context; + + public TouchImageView(Context context) { + super(context); + sharedConstructing(context); + } + + public TouchImageView(Context context, AttributeSet attrs) { + super(context, attrs); + sharedConstructing(context); + } + + private void sharedConstructing(Context context) { + super.setClickable(true); + this.context = context; + mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); + matrix = new Matrix(); + m = new float[9]; + setImageMatrix(matrix); + setScaleType(ScaleType.MATRIX); + + setOnTouchListener(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + mScaleDetector.onTouchEvent(event); + PointF curr = new PointF(event.getX(), event.getY()); + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + last.set(curr); + start.set(last); + mode = DRAG; + break; + + case MotionEvent.ACTION_MOVE: + if (mode == DRAG) { + float deltaX = curr.x - last.x; + float deltaY = curr.y - last.y; + float fixTransX = getFixDragTrans(deltaX, viewWidth, + origWidth * saveScale); + float fixTransY = getFixDragTrans(deltaY, viewHeight, + origHeight * saveScale); + matrix.postTranslate(fixTransX, fixTransY); + fixTrans(); + last.set(curr.x, curr.y); + } + break; + + case MotionEvent.ACTION_UP: + mode = NONE; + int xDiff = (int) Math.abs(curr.x - start.x); + int yDiff = (int) Math.abs(curr.y - start.y); + if (xDiff < CLICK && yDiff < CLICK) + performClick(); + break; + + case MotionEvent.ACTION_POINTER_UP: + mode = NONE; + break; + } + + setImageMatrix(matrix); + invalidate(); + return true; // indicate event was handled + } + + }); + } + + public void setMaxZoom(float x) { + maxScale = x; + } + + void fixTrans() { + matrix.getValues(m); + float transX = m[Matrix.MTRANS_X]; + float transY = m[Matrix.MTRANS_Y]; + + float fixTransX = getFixTrans(transX, viewWidth, origWidth * saveScale); + float fixTransY = getFixTrans(transY, viewHeight, origHeight + * saveScale); + + if (fixTransX != 0 || fixTransY != 0) + matrix.postTranslate(fixTransX, fixTransY); + } + + float getFixTrans(float trans, float viewSize, float contentSize) { + float minTrans, maxTrans; + + if (contentSize <= viewSize) { + minTrans = 0; + maxTrans = viewSize - contentSize; + } else { + minTrans = viewSize - contentSize; + maxTrans = 0; + } + + if (trans < minTrans) + return -trans + minTrans; + if (trans > maxTrans) + return -trans + maxTrans; + return 0; + } + + float getFixDragTrans(float delta, float viewSize, float contentSize) { + if (contentSize <= viewSize) { + return 0; + } + return delta; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + viewWidth = MeasureSpec.getSize(widthMeasureSpec); + viewHeight = MeasureSpec.getSize(heightMeasureSpec); + + // + // Rescales image on rotation + // + if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight + || viewWidth == 0 || viewHeight == 0) + return; + oldMeasuredHeight = viewHeight; + oldMeasuredWidth = viewWidth; + + if (saveScale == 1) { + // Fit to screen. + float scale; + + Drawable drawable = getDrawable(); + if (drawable == null || drawable.getIntrinsicWidth() == 0 + || drawable.getIntrinsicHeight() == 0) + return; + int bmWidth = drawable.getIntrinsicWidth(); + int bmHeight = drawable.getIntrinsicHeight(); + + Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight); + + float scaleX = (float) viewWidth / (float) bmWidth; + float scaleY = (float) viewHeight / (float) bmHeight; + scale = Math.min(scaleX, scaleY); + matrix.setScale(scale, scale); + + // Center the image + float redundantYSpace = (float) viewHeight + - (scale * (float) bmHeight); + float redundantXSpace = (float) viewWidth + - (scale * (float) bmWidth); + redundantYSpace /= (float) 2; + redundantXSpace /= (float) 2; + + matrix.postTranslate(redundantXSpace, redundantYSpace); + + origWidth = viewWidth - 2 * redundantXSpace; + origHeight = viewHeight - 2 * redundantYSpace; + setImageMatrix(matrix); + } + fixTrans(); + } + + private class ScaleListener extends + ScaleGestureDetector.SimpleOnScaleGestureListener { + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + mode = ZOOM; + return true; + } + + @Override + public boolean onScale(ScaleGestureDetector detector) { + float mScaleFactor = detector.getScaleFactor(); + float origScale = saveScale; + saveScale *= mScaleFactor; + if (saveScale > maxScale) { + saveScale = maxScale; + mScaleFactor = maxScale / origScale; + } else if (saveScale < minScale) { + saveScale = minScale; + mScaleFactor = minScale / origScale; + } + + if (origWidth * saveScale <= viewWidth + || origHeight * saveScale <= viewHeight) + matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2, + viewHeight / 2); + else + matrix.postScale(mScaleFactor, mScaleFactor, + detector.getFocusX(), detector.getFocusY()); + + fixTrans(); + return true; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kpit/chhotescientists/validation/Universal.java b/app/src/main/java/com/kpit/chhotescientists/validation/Universal.java new file mode 100644 index 0000000..5b863f6 --- /dev/null +++ b/app/src/main/java/com/kpit/chhotescientists/validation/Universal.java @@ -0,0 +1,53 @@ +package com.kpit.chhotescientists.validation; + +import android.widget.AutoCompleteTextView; +import android.widget.EditText; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by DNYANESHWAR on 11/7/2015. + */ +public class Universal { + + /** + * For the GCM. + */ + + + public static boolean isValidEmail(String email) { + Pattern pattern; + Matcher matcher; + String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; + pattern = Pattern.compile(EMAIL_PATTERN); + matcher = pattern.matcher(email); + return matcher.matches(); + } + + + public static boolean isValidMobile(String mobile) { + Pattern pattern; + Matcher matcher; + String MOBILE_PATTERN = "^[789]\\d{9}$"; + pattern = Pattern.compile(MOBILE_PATTERN); + matcher = pattern.matcher(mobile); + return matcher.matches(); + } + + public static boolean isEmpty(EditText etText) { + if (etText.getText().toString().trim().length() > 0) { + return true; + } else { + return false; + } + } + + public static boolean isEmptyACT(AutoCompleteTextView etText) { + if (etText.getText().toString().trim().length() > 0) { + return true; + } else { + return false; + } + } +} diff --git a/app/src/main/res/anim/in_left_animation.xml b/app/src/main/res/anim/in_left_animation.xml new file mode 100644 index 0000000..3a692b8 --- /dev/null +++ b/app/src/main/res/anim/in_left_animation.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/anim/in_right_animation.xml b/app/src/main/res/anim/in_right_animation.xml new file mode 100644 index 0000000..3beda6c --- /dev/null +++ b/app/src/main/res/anim/in_right_animation.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/anim/out_left_animation.xml b/app/src/main/res/anim/out_left_animation.xml new file mode 100644 index 0000000..a64f359 --- /dev/null +++ b/app/src/main/res/anim/out_left_animation.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/anim/out_right_animation.xml b/app/src/main/res/anim/out_right_animation.xml new file mode 100644 index 0000000..01e1fea --- /dev/null +++ b/app/src/main/res/anim/out_right_animation.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 0000000..2120180 --- /dev/null +++ b/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000..efc9d3b --- /dev/null +++ b/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_manage.xml b/app/src/main/res/drawable-v21/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_send.xml b/app/src/main/res/drawable-v21/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_share.xml b/app/src/main/res/drawable-v21/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/card_view_custom.xml b/app/src/main/res/drawable/card_view_custom.xml new file mode 100644 index 0000000..ba7d3ef --- /dev/null +++ b/app/src/main/res/drawable/card_view_custom.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..57f2249 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_roundrect_background.xml b/app/src/main/res/drawable/textview_roundrect_background.xml new file mode 100644 index 0000000..13d81e4 --- /dev/null +++ b/app/src/main/res/drawable/textview_roundrect_background.xml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_calender_view.xml b/app/src/main/res/layout/activity_calender_view.xml new file mode 100644 index 0000000..cd5f833 --- /dev/null +++ b/app/src/main/res/layout/activity_calender_view.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/app/src/main/res/layout/activity_change_password.xml b/app/src/main/res/layout/activity_change_password.xml new file mode 100644 index 0000000..52511d3 --- /dev/null +++ b/app/src/main/res/layout/activity_change_password.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_edit_profile.xml b/app/src/main/res/layout/activity_edit_profile.xml new file mode 100644 index 0000000..954ed4e --- /dev/null +++ b/app/src/main/res/layout/activity_edit_profile.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_experiment_detail.xml b/app/src/main/res/layout/activity_experiment_detail.xml new file mode 100644 index 0000000..0938a9b --- /dev/null +++ b/app/src/main/res/layout/activity_experiment_detail.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_experiment_view.xml b/app/src/main/res/layout/activity_experiment_view.xml new file mode 100644 index 0000000..ad0b511 --- /dev/null +++ b/app/src/main/res/layout/activity_experiment_view.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_forgot_password.xml b/app/src/main/res/layout/activity_forgot_password.xml new file mode 100644 index 0000000..c233e6e --- /dev/null +++ b/app/src/main/res/layout/activity_forgot_password.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_join_event.xml b/app/src/main/res/layout/activity_join_event.xml new file mode 100644 index 0000000..0135fc3 --- /dev/null +++ b/app/src/main/res/layout/activity_join_event.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..acdd842 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..db65bf7 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/activity_play_video.xml b/app/src/main/res/layout/activity_play_video.xml new file mode 100644 index 0000000..8a3bf13 --- /dev/null +++ b/app/src/main/res/layout/activity_play_video.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml new file mode 100644 index 0000000..c3adb0b --- /dev/null +++ b/app/src/main/res/layout/activity_profile.xml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml new file mode 100644 index 0000000..c9af8da --- /dev/null +++ b/app/src/main/res/layout/activity_register.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_send_feedback.xml b/app/src/main/res/layout/activity_send_feedback.xml new file mode 100644 index 0000000..d075312 --- /dev/null +++ b/app/src/main/res/layout/activity_send_feedback.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..cf5a695 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_update_detail.xml b/app/src/main/res/layout/activity_update_detail.xml new file mode 100644 index 0000000..f5943e1 --- /dev/null +++ b/app/src/main/res/layout/activity_update_detail.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_zoom.xml b/app/src/main/res/layout/activity_zoom.xml new file mode 100644 index 0000000..38a19cf --- /dev/null +++ b/app/src/main/res/layout/activity_zoom.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml new file mode 100644 index 0000000..d5f0f29 --- /dev/null +++ b/app/src/main/res/layout/app_bar_main.xml @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml new file mode 100644 index 0000000..ce7cb55 --- /dev/null +++ b/app/src/main/res/layout/content_main.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_experiments.xml b/app/src/main/res/layout/fragment_experiments.xml new file mode 100644 index 0000000..f1b343e --- /dev/null +++ b/app/src/main/res/layout/fragment_experiments.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_update.xml b/app/src/main/res/layout/fragment_update.xml new file mode 100644 index 0000000..d962504 --- /dev/null +++ b/app/src/main/res/layout/fragment_update.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/grid_item_category.xml b/app/src/main/res/layout/grid_item_category.xml new file mode 100644 index 0000000..5b3a46f --- /dev/null +++ b/app/src/main/res/layout/grid_item_category.xml @@ -0,0 +1,52 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/list_item_experiment.xml b/app/src/main/res/layout/list_item_experiment.xml new file mode 100644 index 0000000..4d0795b --- /dev/null +++ b/app/src/main/res/layout/list_item_experiment.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_item_update.xml b/app/src/main/res/layout/list_item_update.xml new file mode 100644 index 0000000..a478be7 --- /dev/null +++ b/app/src/main/res/layout/list_item_update.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml new file mode 100644 index 0000000..4211425 --- /dev/null +++ b/app/src/main/res/layout/nav_header_main.xml @@ -0,0 +1,41 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/spinner_item_cs_center.xml b/app/src/main/res/layout/spinner_item_cs_center.xml new file mode 100644 index 0000000..f98736e --- /dev/null +++ b/app/src/main/res/layout/spinner_item_cs_center.xml @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml new file mode 100644 index 0000000..49e0c22 --- /dev/null +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/change_password.xml b/app/src/main/res/menu/change_password.xml new file mode 100644 index 0000000..8b409fd --- /dev/null +++ b/app/src/main/res/menu/change_password.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..61afe8a --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/menu/user_profile.xml b/app/src/main/res/menu/user_profile.xml new file mode 100644 index 0000000..71ee093 --- /dev/null +++ b/app/src/main/res/menu/user_profile.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_calendar_check_grey600_48dp.png b/app/src/main/res/mipmap-hdpi/ic_calendar_check_grey600_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d77d63e2b270c52480b7fb927b958e131f9cfd54 GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|V1}PZ!6Kid%1Q+h+(TN*w=qf3dspBg>M4q7%=O zmgec{>BYVh(O5LwThpoCi7TzT&{Jh%Q{)o9Jg%~Wl{-A1@ABy0kzRPoF(c^H`-<2q z1*y+Ald3=O3!nF1VqN9u8VkMh>Dmi2XC2m9ZGP+Cy={}@^37(?T>CKjF1McjpGuF$ z86q8?AmZizzAwjSwB~K!?dbBI@eV`5$?pt@su=b~WZyqh_~(#>@fn$n?CjTBBCfv~ z@_x-LJJxsX@yEM!=g!Ta)a&Xnd-m*Br-dInJEqn8Pj|g`>+!*ag4K8P_;=*G9$%2O zaYtQT0YgK_wC9c|wYf=y@ z(UtZy`MUX&&9CCkzp1{IJF>*VhYLcOT;4uo{i>_4gamE-7rltv8~6WR(b_w29n&q? z8Q%3Af7~3kw(RKBs+~-~c-37ai+ZO>FW|JuyzaJm;%0e~B1RL|^o+G@w?wV&Uw4g9 z&ZFV;y{Eq%nSUN*WMboDWS?=ka)P1SyRTLKR&&p7-n)0NioZp}W7`uF!sWZ~@-xhv zcKYe`?Cfmu&n=HdG>$4Ry3OF=!f(0cLctuSx%1}P`4wJTrr6r?SY$a zM6~*X6_U?v2+<0)STdn-4io3Zdu=_BWjq=}I3?5d9AqxZv$isy`REhXAR@zO@Z7ss z)5Gx*gWS5KY6`5~%oV#Ld?zyO;g)3oP;vR+o6PTB`3&n4^2=K$F&SzKOa>EQqTjFx z&-0o8^xzT(tBE-(cboV9ns>}`(aa?d>udcVD_rzZT2QxtfA(72Z?=J9k=gyf|NdK- z5-k|8`>vdd=O(TPC%zX*mP}DOx$4P&UdD#Ml4@^1eE5)(n)>u=fyEz3mu?0zMx7t? z!Xo$&q-W-qu6{1-oD!M(}6TtKf~3pEvFe67=t}s978;gzrA)=J2z3}_(%Rq$%5c#L2O++ zn2jb(Tr_*OM1tB(i5LIajSN4kOL%&91?@04+Ou@VgcBz^Bs@A9cg;;MFq19X_Ib`> z!;h^tAz%1!E zJNpXT;{^MAh7*p+lxjA75{p}IofZ;ge{J33Mt&OkbUcoqh2gp?#bI0Mt#{d^W8$x z&>y;cB=wg`_pd%y{AHoB)cKUxg=$9+UR%PIDCZq`;!{w}Ik!b$%S@hfS8Y7e7=gfJInZq2`QdX@fVM<-Q7i4r0+csq#__sCpha1L z^5_kA;}Gr?+$##u2-e^jp2PsE6kPvFaPc?Hj{#KFLW}VMudu2YfcBw|36Z|eqCk6R z&A0Xf(EC~Q`@H}(lI*bo*YK;GKy}>30o=qSE_4&9h94Nfew@G+ToO+7j?`%$YT!E7 z;%IX32EO7v9$+r(+SWsAw|3`1852tleLer z97pgF%P^Q+SA^qa92>C`zuRq|*JZ;vEd=m7?8GT-Puc4`p5i0E;HnJCGb>O-2;R|T zUJ*|BZ7tR;!Qq@QoY`e3g~T@?#K~YAn5a7I-!gMT2-G1g74pusI3?`mPAoJdRCYty zgnL*}mNl}((0ZZ7m=uCHc3adIC@ssbNJebcn{TAKY^+QRH0edwKh|`qQEb&pAH*Ih ltx7>n;klfxbYFdC)gL^!u@>BCbT0q^002ovPDHLkV1hKe2Y3Jg literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_file_pdf_box_black_36dp.png b/app/src/main/res/mipmap-hdpi/ic_file_pdf_box_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d05ed4eb0f91b28904ac3c6155cf240f76205a35 GIT binary patch literal 820 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 F69CQLV_^UQ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a785db3289ef49c38f94fa273e3f70f6e6365513 GIT binary patch literal 5790 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_pencil_white_48dp.png b/app/src/main/res/mipmap-hdpi/ic_pencil_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2beb2b4279e750488b07e8add9a7979d45ff4d6d GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|R5Tr;B4q#jUruEQ1a^2)I2IW4y7ClTkAK0YgiQ zOzQ>K=?ib9Z0jf%*sOBIrT<7HH&?aStCio*{CUrC=}UN&w^6W{=F%xatDZG*8nEAM z@P8n4qdV?;7>iFMYyIwQxlG=^2@R43=bznjj(TLH_Fzl93Bz(-l?NpZe#IW?$`i{L zr{5@B(*5FVwbPjf=JX}~FLv4#&TG_va6#~;ZIzk+oaIv&+Dv?Q@pI+l3Z<`8Y9_`t zKW+^9mTSkD&J$#8;XENP%VKTY9=jz9vD>>QH;wL4>~q?ZF#@- z+*}PAS^_ThO8`^YG81nH=hD%ir7&0`ZuC_b*6cd$sy-Au jTU!@T2?7S*tvBqc1*?+vJ(l_dLGCzi&Y`^+qY zoLh*xJG0z^CUP$f{DX0V5D^LaLM%@&t=^>(r1(b5v{U!G)}4KRy||4cXZCJpXLjyn zK5%d5H~V{j&u5Dg+%ndrfD61$^m>n#dKZoWab?JV&mBTEPzAI{EbrT zbTXMdpG+pN13;xxnR4UCjTuDrh!El#X6^v+z&LVNiRc}r)I&~k+@4}_zvO6|wz@8- z5j6n)%)HGs%@Y{CGud&u{`Vb#y}4XYl*{FIBKiQp%Wyuh31;3+tf1Y6R79<%10_$d{B-%ZkO~$smfCQZ6H+egLZR4bH>7xp!Mt5-vgl2A$+({DD(wcbgSe59tG8Ewbx<);#pHltqro^R>}c9 z3aU?8*wOFDt=x%L%KWm~sGbBWSkWMj|@qcX46M0X)3TE2U=Hy)9do^`qa#)hF0pO|tuq z>k&jmciU}GCX?sG>_|{}ImM>fZTx4l>sBL>Iq6#oFM@1GN~Kbn;x^G_z_lP|w*7}) zrBZn??9K#%m*=3L?Y76`@khh%Ob~cE#cbzzn0ZOqoe2Whf|OED^E@30X)#2Qxb9GW zWyVFj-wGj?6^fYf2CRRI62k znag%DW-du77rD*p6)9yq5g88QAg-E4ikW zT2U+(zw|Sy?^CX(X?_M^euKMP5S)s|Vo&-l2N>U};F^Jffh%+8&fV44)^?qlpCY2$ zn$LPO%v=^iY)GY2?{3<(>GvSon3SI)0Qi%L`j|Oy7{z`~Nvz%n+eermFkK2z~ zCcL2kGREgn0>E`Xfu3`N~&GA0@q&^jgvjNl%P19~M}5$QW}YM9*2m zbpQjv81R?;`~{u^mw{z2asWbmm@n8`;5P8pL5ht!a0^(KM^2>#0gHjbq?xk#0$c^! zvdF27AYe1_vP3a+83#5rlT!&n!0F`3`eqvFOOxXwsL)XixG3qKq(vFN{#Me6q^FWz zNqQ%#o_y9WsY}u}Ne3kLNm`d-pT8xYm$XsR^?4gMCdkMw;8KR8JOc~^dx6YBff{fO zc!b*s81^RyoJyKcV-)BvpjIz1(K3R7Eu{bF{78O!Mb@kV*D@TGu!3j|XOMc{W}w}%WvmHmkUcT#c``kzyj9B+bv<=E#|qg9pT zQ_z5={tN{Sn7DQL`6f4ItWya)n1v0u&ZtFjzlg3efKPmyE#5JHZNpqfKo+weVN zj4AvG0YkD(JbmCI$aeAftmtr|<+z5Pw4A-WLT4)jmovzA!~9+7X3D@tP`hP&J=b1Z z1Q$X76)u8oXG(jny|f4}f~GCo*N1MV3|s_FTDETw-Aoy{2zq1LzCUy`W#A%c+_Jr| ztf@vz5o)rUBj0gLwqL+fUm=3r?#P&J#FFi?&k(_Gm^I0@Gv(|)>oZ8uTdtN&HQDrxK5SW@R}7{7gA}I=l-?f>q(cVGr;*B}ab{IZ3$C zkDd<#pHk{S1F|f|DOFO4#R~@Lr*Um#<1^3|RL-oxK9|4j0G>9fH3J+A?PYH8G8a%8 z;3)7g!-4n%oGYrYDlWlmle9w8N=ZGE4oW(t#*(~d{E>9Q81taWz6ynKi#WdkCqnn1 zRg&*zz!Six(0%8XRZ>>i_@% literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_youtube_play_black_36dp.png b/app/src/main/res/mipmap-hdpi/ic_youtube_play_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb5aa7123e90d3e6c920168e1217af539b0ae7f GIT binary patch literal 731 zcmV<10wn#3P)0d-IT-9e%Yjd7tyV$>VpHO4z|2M++Q?VURg;0<)Cpb0TV zSh&MMg%MB&7WH7->8f;fS5Pud_XQrp>|L48ws;+`aBoc{4B8_9r;+hHI5pV~% z1zZQFff-;5XvqKHCSr1HIJoE3gi%0RtD~ z_kb_Jal_&haJ#IjE5PRlm@vghpi{=!VgtnI#bQxYEnu?&!t-JiyZgi$j~gJ`Hs(#4 z(Xmi8#WnK0h_NRgI&``n7vO0TV-GxZxC|r}7_-(o0UY68`!A)vE^5FH^&dMD&Htdw z*evEumLUP20jnO{9Q813V{9%!=c{5a31lv#S!ZlIQ0IN%g+$+T+ZoL|V^jIN911OKI&(X2C8YGPRepQV}6T&J;965LDE%2*YpIErg&T9x8|L0j|QpBi-B z2j0lB3>nS3jQJj8^5_EZ98767w{0#8LE&wH zWvmy-kk8V~)vPo2EkMVFZUQ$@+q5&NWv?-Y%U>6OYjQr0+B^if z$Z#y{0|#=x%Wwkw6E#Et?1+IK)O4u_Yy(?j>H}(fHxh|NB9X{>;siR^?_kEgekA|^ N002ovPDHLkV1nj;IBfs` literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/logo_transparent.png b/app/src/main/res/mipmap-hdpi/logo_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f948adaa882e39fb2f058525235a0ac92dab8d5b GIT binary patch literal 129497 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9f540ab820ed9a775455ec1ea84997ac8c44de3f GIT binary patch literal 2982 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..429ec95ae7100407f1a6f91ce7152e3d3c651299 GIT binary patch literal 8976 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 Zj{wqEF_aR=h%*2H002ovPDHLkV1m5T=Rp7f literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..63b92a29d41e11f1739e5bc9bd6d8653a45e3f36 GIT binary patch literal 17381 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 QQvd(}07*qoM6N<$f<$=^0RR91 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_logout_grey600_48dp.png b/app/src/main/res/mipmap-xxhdpi/ic_logout_grey600_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2d86299bdc4311500ea824ff56a84a0c2a14983b GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE=uJQvb0|Qf-r;B4q#jUruH+EkRkU8-2{pzPu27Knf)jQ_Q z{_iMw?r7luhR4(RWH+Vjq`a8mnpb%F;?aZl3-vB3{o~BzJM>jSllS~nE+yZ%TYJ=Y zey_W~QS)R!Kfhe2@B|glNlV&i8PzKGJ>LAas&?&^DsCHgx$PGBWj{D)|JCF<{Jl^n zzlzmluHSsV_QU!Iy0@|4zFf5X?!I~FpYOl5Cqwf>ijicm+v0q$mEG%7%QDx7SI*n- zbJ-;S^{nPi%#H#vUpd(wG)o0p4u;OYE)ybCeSM?5{U2!+9?1Yu2btZ#=*>>9xZJfs^bC84XXk1!Ov} z+|&#El>Km}bw&B-OxCwn8LB@ySlAVQai|{0 zAG|3?80#Ce9yZK(*jl*YaP`Ju8`Yr4|K2Ice8^^%?P31MAlu4Z#~|Cw{Epf55aaen zsmBiI|BGwio|^ThA*|rQSch+9kd_ z_5AKgS=*@}|HrHi-P%-F#&fZI=c)!fFzwa2NoV)PsP((9{V-qqRqOPo*=Fk_xuz`3 zj1xJky5Wt~vwf+7BGYsC8S{Tw@#;a+#vQW#$K}mtpUq!-#j=2J&Q?%t#%9lLNvyD) mefHm$PG!$YDxUni_aB{nChFkCpS-~2#^CAd=d#Wzp$PyP-Yn?= literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_share_variant_grey600_48dp.png b/app/src/main/res/mipmap-xxhdpi/ic_share_variant_grey600_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e71f761e95d64bea16b265aa1e05804c8d33612b GIT binary patch literal 1515 zcmVRM;24N(+^AXx&vQ(uaZ|Ek^w6i>Apo8`8|~Jw9}bv7|e9cgLN* zb$^euXU?4a-`PEL{&RsYUAlDX(nVJ&?gFC1vaBHhuQ2oT05%4Pe=5 zWSZt?0FwZ=g@k$l-f>;`QX~1b7HDK-WKan4DS&$wPq`|k+>^~_&#GQSTY*MLM>o}K zwetYhH+bq?B9Yj7NhDwQ07$D_zcM8}ol;$Ckelfzdp6j~XRRTNq4zg{# zw^FIRU#rzp0M2Rh_GD3wZWShHr$ z7=SlW|4Um2kT(p&wrzW1L$!me~leB4?XVBV) zfq!2(CV!{lI#mPzt5E|$o`^nl9OqixVys5T46Dq1&@hZC+qPxgqO7E$HXj(?eYjzO zhcPXs+~T@!AAo(q#J(zl4f08)QYl)N^<3PdtfUhSGiK&v)oS&CmWElYs9LVfydZ=a zOD2;OT3W8HqH5YR^JO8#h~qe)$5E#?uYCZVl2VRjv)LcoS)*<*4t)SeecvC;<#KZ? zKNub!Uf0vpvs(!90)YF2!+%IAy+k5$VtjmjUR!}~l1``lh$sgjtdso-;9bKorT}1J zVIf6C?*X{)Hu3Y!?3T-AXL54V*H)mLHCdMR8i2!LZ$XIY0yED7P}w0>6UQ!9{ z*q_*Hc%D})7K`8X_xEoE@N6r&gb=gEV)2X6xVRVHBoDQkfSK>;o%U_J^R*O+h@yCj zpp-*PfuxjPyK-nL(Dm!rzXZ_KY!xscjG!+N{W@ctG zP}?7UE7QTbN@y!kp-`v^A@%}jWdHMNA;jK7p`iTYQd@xlV0?Uh-Y|^a!P9lU34J!$ zdb7JxUr3u-ER1wIZ3rQDG4mjR2ZO`E5z$#G<;hGYQ;ECAE?v5G>C&aW{0*~hKD&Qn Rkg@;(002ovPDHLkV1jB0zWo3I literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..aee44e138434630332d88b1680f33c4b24c70ab3 GIT binary patch literal 10486 zcmai4byOU|lb&5k+^GN3bv-?^>(QkVinb zlU9`mfQEQnq$S4VGrg6fmMQ=QFarQQ0ss(?uiys&;LQU7M-~7engIZmZaH5x#UC3m z-zvYBd&I}<`b3rPHj1tDgVv1x| zQss$ELI?W?E(!7PKk$lm@;7PwPX3o43{Ccd9@_BUsL4kQzSMa&=g{>4wj9#)9wgYw;=H@gH9KK{s?Be8N1_8W< z1Rh%Lm&PAfyYb*rGB%E#3q+}riOBB~+@@X<`9mgIiAex!QP8vg-XT>=+N&y*jC-f< zGihyr7XAly+G)|_e)qA?rnKZGG(x?=lLM7nrPk&93@5eX#7I_$g8kMX`0h=}l`HH) z=bpOkBCx=z*-fyr{yp7A9F=%o*qm93t_#tB2lAM@O{fX9ju%X#0~)nRUMvrXClh9w ze8|a0|0}JJg(_@$2wItI?LUY{zF78o(P2BR7;aC^@(jOp{8RE%U3m>MV5%Lu*46b@ zw*c?Nweu!TULS~}*9mi!ejNfNa=`po1*!jiYK)osxi%b59(thEyUZ>#lX@uEXSb_x?3)0kvB?8*TAh)7}IbzSm}5Ia;_?10{}M; z7vq-OS;Ayk8%_c-gg1Ee0FsrRU5phNs#H9Lp!1t+hwyK~9W0bWCxuG$LM~wQuumEw z=fbBD@sQE%1^j z`T@`PZLRVyWjX@*tjc7r;w$H~aW&7vu?|war?84^sg!{J*RH|mhq?KTsCVQBC1~fR z>99jeR=g-Q2b=d;pKwzXwYjrG>?pd3tFSsHN4in{usYLdK;01X2BdRLFI`cuB9yI) zI_ZX?7_(bz`MX2@^mCknx7 z*f}KV@}TBBc}CXMR8T_5yInD3p`KrNROSA;HoJJtlNG3weri%utO$eeY0 z+w-NEn;(;UCBk=OM$f%=%ma24wV7$idelqyNWI>sz1>BlGwr_3UugqVjY+UYyi9P) zxCB?&rPUetoZN?|*D%=hOOJ_${JU3GRjppY%&8Ws^G6>iokr^Bmv1&*@#2#5mXu05 zhPVXaQ`qe5i0lP-1^XL45x`ertKU5d-8b_?*1+tSU!qCeqD9gZP_>ZLq9p)RKtV(B zOh&^x>gV^eqb&c~Oi0|HgGG|gjpbR`9aRdZhOimvS2Y3e?eCFiw+L#_mi9j z;nU}gih+zTn{nv_|L}IllD1Dr3~@yitI}+4C&+;SR+cEfelqJ?eUjZ%&Qz)W8S750 z+vG8Lvo}xXz2C}S-m|9*uE?NWQWT#W+p@$DkH8wVn#=gLKa13M!Yva9qsfE(5Z#0V`A0pN)Ok zP*Eq0(~e$~m@iej0#Av_z703y-7|W6`UuGDS8fpy2rUgINZs#`33@@0(S%~%XUO5G zscEp&x^dU`8syC67USOswNLq>Z_}q#gLh2x`zR)0wvor72-IW@oDpnT0x zWn%LZ_yvR*7geY6<}MC~SViD+4`S9XC|L}N0ANpsUU;50sAjL zb5h>&s<-wcdf2>}P91QgeAu~ZnB7;;FkfKJp^8ne8!-`jK0+O(^`s~#RE0@)=IWiQ z@(vh6D^4jN5ih;*c4J48FMC9MwoN(cXk1Wiq55Vi-^X#p8R_(!y81}YDdMefwdl2F zNA0n}-!P4!FaCe-jnf{^I#?5W=%9T1C|$ z`+tq*x!rEx)Bkv-eO9$mWML9_yId)A_OltKIH-X=0eJ`Opqqj&s^T;PLIZXJ!pEi!=3ZLHPGi*~?<(L&m6;{M(636VC<08tan>&c6fW z%KEuUN9x|i7Wc^-0l&Vf20kI~_XfD4hEac=&}5n&MoYL`Xsx=1po#V*6wUpwB@pu* z*@2n|zglL~zr$9&uOd9_%)GWk&0UN`<&GAm8=Ba-@MT&TH*`NHlt+CMi2Ag;LgGpm zm+ybGL-!1Z$kBYk66=39zAsErw1}|-l1npj-?3g1LE#PXU%%_{8kO=5!W!6pQ?z&i zc_MuV(xKMXSA0ga@IsiwYspm&d4|n@L_zji`zUWxsM}|=@R}BFfT2P!uJcrQf81WG z;7~y_$uMK=ih(2hrfqIGOzb(81e}^7h$dQ*w9&zG_k*kV{ml>Dkn2!p9tb_+Sa82P zf!TC+{4a(i^7UC$53;w?sleb~lFWqeCjv5msi}#JQ!wJtA>=k~`WL0M{^a9PG3%vT z6x=jB0{7wX7$gs%H}xJ&s+hHnzrl#L*=KB8OZd%sPoxKs(`;%|I$(^;nFYa4Cg|3D zmbQ)m6I_Y@t)A~{YBRo!2sYI^n!q)$tPp|m&n1BkYVmX22Z+nY#4N{Bb0!Ko=DOhh z8)8*=>e(W&-%LSWUN;u45Wex{{R747!a~45S>12$wNc{9N95&r%gU+b#-B7PcF%`_ zbDPAsmvpVBsQpf}s{igh23+1)`QSj71!|zjij@kvxgob&J{E97Lwu==Z)RY-lujF1 zts{7+jfS(K5+clZ(CY~%ks(F!=cb)YtqEu(dp_7=A?O!zz8KONrrma{eU-54%}Dm| zMb0!-=YUH?S7JzBX|TVr;=fB(8}a+Mcip|v&=pAeFMCaHj_Nkl!sWeZSb#k<%oczm z#`lGsgJHo7RywsRYYQs4O`J_C=fARQ$)B1peZk)|&ULCaa#RJ45lrml54sxO!CCv< zACe-^PSoZc!)x$#iZa*NuMlS%Jd!_x9|UdgLzlGyF0cI$EUFG4O;L+8*+s;KNL-ld z?R+O)guOt(>{+*e-+_A{1MBbRn&>53j=33ngVZ*A9^^??x8!ww@-m%DVVPmliJh;B zA?gVg!0|Rs7)?hBD^!lSxbI8;-8Q65B4DKw29-K9_w0glvBA&vz=a(hBCWqSnbKS0 zUg%$!iEY%1jOqivHBW;uSX*e&(J!Yr7cborEc&_4TQAAt(Hs@99pynWwVQc-PD)!b zEAfVEq-cX>10nj+=mUt(v;j?>9`bLJayfOcTYEOojVJwg!qg=XHGMAonnJPa; zUJ!+pYTulTHW%^S;&|h~V3suNSc{q3^zg~L0z(5QQ;Fz}<5*7QiE`G{EY!_Bq6Tf3 z#Y6<%5EL^6+vT44<%^2!TOb&Drb?#eUqR@vqcvAd=l_6n*oWcLU38eLio z&XA9a$>+}PoZ&n7&1;j$MfqAp&SK~ziPsl|%{|CWXWM9wxyVKXe0%lk}rDC8g z8X@%6X|;SG;muLTK4d!cPgVxqjvaX=-$(Q65p5S*rI%=0cH7U(J{e1RPLJ7=nOmA) zMlRB`!r37ZXhzV+&X?quSyu}sbAn^a+S992*Te=%QW1izNzH-(Fc!u`0^%jIwx-q{ zjJ$P>vDS90xVX3yM??JQE(8|%*Ent^LOWJSOM1DpOGR5rG_7xH(O_SiI zQPhe?AtaSr$aWQDFB=s4vG}6A7sKS9#`*O?Gvb$VpNFveZ{M$e6gN?k zBAf6x8lMv8irB7O2F*?SxjQ+G9(Zzcf(-v6B#Che%7km*jk@ z)2}#vcILe$u75B8OqP#aD^OyEpX+8%bA;T*9+xPtBOA56r>VBH?W|l@4D*s*oHF7b zKiEI(=9Q&zzKDNu(c_-(iYp|O=RX90e|T*1D)Vi}F|XXxwzlFY%vI5oyr@gp+zfor zE{L0=4=<&pTg$Vb2&yaL(=zg-A=-V)<6G@}QKeym;mw^FzryGI(YX6E{x5!pKKNFb zX2wUTC}&?H`qv0{Ouyp!O!9>BD+&bp+x5*hFxlEJ|Jlx!dC36CiNWcOOOUw5NPT2n zckQz+nHS7$v`1`e33@@emu_-PmpnE%>A~wldBhO+8|uKd(CXF1LguU>p-iuo+6+#A(zwt<~}iz8;e zi$`F>cJ*M;o0PM7dMP=uB26set3i}BC!lE@>Gk`4oZQIG&&(O{wh_khwAz^jz zLMdgg*JfCk1{LlNW)C?WLX_!#5OsEIb3ZPWV7*KBWoBhmt&{(fw|eI)9LZTDrF;Cm zrRI0DXcArT*)L<`{Gy!R-`j)ca2)6Ks~48Jcl^Qg{XgWYyo6RpJj`Aq>-T>){#|lR zRPY`?<2vJ#s7v8mNz1zwnz@<9ofov5TnYTqj(PJN^Hv0N1N6rZY2Q2ixJ9IY`5B)j z?o!|2DLA8bc-{QD-^}@UP_JB`BjVr};f3o#5P`$++U2>eVvNM%RKxPV7J0hzme%(z zR7M~;#x=}vL&%^k)1dkFp)ApEinI%CXma_IcfN1= zghNTqbv$mD$mXwAWysU;hUAFR0^jhAYjE}TV=j$O0>v_@{)|7er^HCFN$j4D(Rxa+ zr>@Me?gS|zVlda*cn+sM7^g8|~YJlBlxK`p<| zo$B!mr$%Z4An3pBbh@BK4Hi-E7l^3GMOiG?^~~z1Oxn$0PAR&}&*9D$O)(_>aB04e z*{ihG%K2UZE9c%O@J$1R+qtuhVW+Li7>Bw~LBLxQ_2GJ6dWmr`sMzGzRfiKQrm?9I zR~`S8uz0=lw5lTY3!?lQ|2LJNx(Ly%0Hkj_Q0C+f8>^@`ot4vM)#Bo9*u)9;#4lPQ zkD$dnQJ;T3;cR_9pRiRuc^MkgYiS>6*;09uV{z*IYw3#i;TH$m(R{*3w>BS-cM7T<{u?6<8}o91iDU^B)<6wJwL{eG{=U+MNz z>#f)F`15Bnp|A(04!41E4ixt89MvouKW88SEk-A`6{3;V9M)Ips3VNFol3u5WiBmL ze0Uor5Z+x~NDGz=5gd!i#D5L)gN!7;`5bPc*8~;4hQOzIJ_RM07TD_cA!r1XISg_x z%9r&%6tsJq$>~|UQ1|7AZe{Oeu!2V&rjYX=>T-qb@S?3(7FC=Z^XOYf24G=+FJR;^ z&+s!YCtoncOWkA~zS!&wfYTiV$WJeR&@pINr7!v$Vw3}H92S?Mj>$ckH9eSoqhxli^L9 zl6?;LH$mT|@_S}#35}P!_7@h%=&u7n2PH0zl8K6L4SX!;*Nkxnnt~qhgVoG_|@w$t9uwee?p`9loMG zr|Qqo!ws?ZaVp;+zT!zH^@xtf^zzvEF*EJK-3hdBe&e4hTya+V7cwy9k?-&u+1W$J9MsjiXQu0{sN!(0)p=yn;5R~ zm8G1M$wClU4oHZeWuEucT>8fj9@#M0kY>Zjx}{F%fX>qa5#{2}lM>g}Xnjo}l|ew8 zkXA5h=I9hvEufUW_wOT8b^(DlBKCuM+=VI>J`Ua;1OioQTVInOmu*pv>=0&M>MOS| z%x%82SVXH|##aK|&I9wXCi2Kuz8@~`}P*VwE0=zPr%s5aHvFP`FsjEx2cBo)6ex*A zWp5GPoq0Vy74R>2aPlQP>~oZKw3$U(jAdy#E}=(clqiqe%$7=zb#t-GOC`@<-LJz{!m%n21KVT2lg4>F^Qyl9E2SvvZNE^Kq<8~8z*~izg_2G$e)DWZ z&r)^t$fjc4=0*E2GgW8V@;;-uQTLpkoe4G&6_Gi{=*bj1demc_{W*z@M)N3w-y!I2 zxt>0g2bLTSCr87lvU@@?w=y0(8-&vH2iDYp1oVatM3hj{k zTI09~y|)(A+XuR&rxolH&~6OyHuw;ulgO_ zPuTLyiVw)P|B03nB7klGZ1SdadQT)(_wcJpUd5Dw*Tl^3%=>G;G`B&%wwFm(MjZi# zMzuQuU>R1Zq8as9MkmM~4%8aV4m60Cl4X`?$zw27Nx(x@)C3hiNs$loyeJV|;3R`m z=2BoxiLeZq;~pUpKfO}+8=>;xkRT&Wh?xRT*$vA=e1-1-a(LQ&8&RQ!R;p| z0{dFY6Iuv97U8}VgGV$6PB!6w5}-jehsz>M8R?2d0-?1=c9Ek)8Yhh)!3TZPk1>d^py>9{d~my1NBGJ)ypHC;!FbEqzyVi zu?k`sqbi!2$c8~?{{=5xCd5}QNx$~UD2(hV0{VWx-}##X2uo*=a!4(~o_<3lOh;=1 zGWy!R&!cXBeOPdKzslPq+FOzt2P)Y6SL*2}8s1q7(#-PEp*Wm`{7r`W-T4WD{gKfb zL=!WtyH86@TGc=5%hW+QVgF5lmp6`bUz|y3kvDq8cEX#Zcon0xK`W6icDQ>?Gb=4k zx9`mayKC`XvhQ;fwwljzxg#~7>oUV^PafLCvQ3GNmYh3%udW9gpP}zdP01_?V#F|} zu+6A+v$!2@w>!LQS}Htz#xrDTMCHF(viHn9B@`r*AN^Uh^K1dYX%OU(L;QO-NS7sm zB}n&5G=+cvZdostKMXC?^Pljs93+p|U_TbCD$_YFH_al)C6D--qOJJg^-4S{e(_Bh(hqonQpIAR3 zLn22yQovcP8^(~lYa;Iw1iN45bC1LAyPgyMn!Us#kC~Od)l{8iBF=vyb{%q5Uo|At z`GioU@7{~W>87(`5`y7oUan|z+y9y6kLnnMdpTsuWXtd+^OE@Rc1&DlS#6q{VJQ~^2R25csGlWAI6%1)G(k1hy(%a6 zP8;j(?t{iGcAAzn*N4^9x1BG`9YQD?lsKuJE}E(!LRb-C04hKL&@?*uDt+rmq#F+E zy;MAG%p~MH`3$_n9%+YIg%-3+vV)5OcqKaeQuCmrhtqvaxZ!JAr|$dSF%)+`Yvoou zOSNuZL?Y9b&gUmyj|pfc5HOzcO#wTn_4)qhXWH?-2h*_V$bXFzOAO}R;U0Utm6jK1 zARXYF88&Au<4|bU zjIqU6CietjeFXz>A`VLxAln~?Tc3Z$!7ZUwvHhxe6;yAIYyV5DChijA_*mxgWa1Hf zpMe^m_ zi=Br9$|jmRXy`ALU7%BL%h!;kp0u2jEG>Y(3_SumS4~Ap=R2K`FOb*E9xFaK2xw@q5)FC9ki5__UGG^ChH* zg8T@CWK(2ZAhn)tl(@xrQ|@?sJZYbg?wPRykjvXSzBgO!5l;~}n=Vx=*>!3~hpG!QO_vZ7nOf(H%X8Zyf5zQI9<;&VgO`J^g!d%ci*Gayzi9E zzV{ggWXFUOwfXv^Cu9g;LXloZZQq$>osapDJ&dlE+FA zOAq0EeuKAV6~J_=V4ai?3X&T(A2S-Y-bb`Ai`xZ-D`VrnQ>pAdiPR0)l-S!eWp};M zhdf*YpjTWa+F;wAvaF(x6TW7LroZ>f%xX1B>ku{kHy23f4Gr*{SyBzch&H417J0V$b=yDLEIl7<2;YbKQ&{=ZOVvMR0}AxP zsmR+tme$kQHP;7Yn9&3eFJljv567buHH|D~F|nOk<45BcE*rk)#MT#RvWplVxMlzpi*dmU?7Pzz{?ICX{O>V+&4<<0nM?7@q6?=qp|+- z^F2j+>w(o9IZ#i9MKt?we*u>AF^=)GwlEo-<8)ZNsl`DO9Ts^3mN?;` zpu-&&=Gn~8C2og^of_Emg!Z)!`}l6?zCnvZ2)$RRO7E_te3B9iY#R5%#LUxR2a$64 zRNuv={A!3W0>=Vd9-Gygqi!GqnO4Wu*hSIx$FOH*78(*CzB@93|C9L^)cR86oytQX zz(VBa;uz&eA4;0&+0T7h>1okMFU4QmpaK8N1A2wlN0S5ncCO%AcYgA${c!kFQ+TiA zSE{2T+HSjei*$%Ai4A}4W1S3}-mXNa1B^jTL+Biw<*SD;pmpz7SdmFu%Z231W zkED`=rBr|FkuV%mCW~b>XQTCw%K0Clxj&QGIm4o%6lpuc4OgwWW^N>I z$CiUaixkCEQf)R*DBF6P&%z|)%AGchvGhBH3v_5YPKL6o6gDG~@`ZoTScT$`HQPz7 zQiqtq$|yTKXN%7 zSaCG2Ucn>50Z`>XxJnz6%(tPlqY9dGm@zHtV2!nWMmS!~Ac!e66nI-(6fh>Qh>8n)+v%wQv>T#tc54h zB%~5--xs;qRhX+bIms&XJP;?K$K2_5H1EpFn-*GyZaD5sGDZ&n5P~FndmWj1xxfxb zSocm{R9OVmD?CfFE;Oebf@%V^7{ZETZUhZ?GM(@uT|gImuIH#AeMtxlE^*teXWH`b z$LnM8?Q_|vjv^u(kO-Y$cB1?ICmH@j5PY(q zaPxf3LgA{hO>D7{M2?XnUpAsX?0!P#eL3cHStcyY4^PB2N&Y`}U05UvjiREStj@u{ z|B)ET + + + diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml new file mode 100644 index 0000000..63fc816 --- /dev/null +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/app/src/main/res/values/apiurls.xml b/app/src/main/res/values/apiurls.xml new file mode 100644 index 0000000..85c81fc --- /dev/null +++ b/app/src/main/res/values/apiurls.xml @@ -0,0 +1,20 @@ + + + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/post_user_registration.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/post_login_check.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/post_change_password.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/post_forgot_password.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/get_locations.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/get_centers.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/post_update_user_profile.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/get_updates.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/get_exp_category.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/get_selected_experiment.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/post_contactus.php + http://cityfi.in/dnyanesh/ChhoteScientists/restapi/version_check.php + + http://cityfi.in/restapi/post_contactus.php + http://cityfi.in/restapi/post_update_user_profile.php + + + \ No newline at end of file diff --git a/app/src/main/res/values/appconstant.xml b/app/src/main/res/values/appconstant.xml new file mode 100644 index 0000000..7e908e3 --- /dev/null +++ b/app/src/main/res/values/appconstant.xml @@ -0,0 +1,18 @@ + + + + + + Email/Mobile + Password + Confirm Password + + Fullname + Email + Mobile + + + Logging in... + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..bfa9d83 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,20 @@ + + + #0089CF + #0089CF + #D7DF23 + #E0E0E0 + + #ffffff + #000000 + #212121 + #9E9E9E + #f44336 + + + #FAFAFA + #E0E0E0 + #3F51B5 + #03A7E9 + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..7c33dba --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,10 @@ + + + 16dp + 160dp + + 16dp + 16dp + 16dp + + diff --git a/app/src/main/res/values/drawables.xml b/app/src/main/res/values/drawables.xml new file mode 100644 index 0000000..9036d27 --- /dev/null +++ b/app/src/main/res/values/drawables.xml @@ -0,0 +1,8 @@ + + @android:drawable/ic_menu_camera + @android:drawable/ic_menu_gallery + @android:drawable/ic_menu_slideshow + @android:drawable/ic_menu_manage + @android:drawable/ic_menu_share + @android:drawable/ic_menu_send + diff --git a/app/src/main/res/values/error_msg.xml b/app/src/main/res/values/error_msg.xml new file mode 100644 index 0000000..3ba458e --- /dev/null +++ b/app/src/main/res/values/error_msg.xml @@ -0,0 +1,23 @@ + + + + + Please enter current password + Please enter new password + Please enter confirm password + + + + Password Mismatch + Please Enter Password + Please Enter Username + Login Unsuccessful, Sorry for inconvience. + + + + Please check your internet connection + Select Chhote Scientists Center + + + Please Enter Feedback Query + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..b5ac190 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,20 @@ + + Chhote Scientists + + Open navigation drawer + Close navigation drawer + Settings + Select Area Of Residence + Edit Profile + Change Password + Send Feedback + Chhote Scientists Center + View My Profile + List Of Experiments + Experiment Detail + Video View + View My Calender + + Welcome to Chhote Scientists + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..07e45ec --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,28 @@ + + + + + + + + + +