Repository: hetsuthar028/Farming-App Branch: master Commit: 53cf61fe4158 Files: 194 Total size: 582.6 KB Directory structure: gitextract_bp3c7p5n/ ├── .gitignore ├── .idea/ │ ├── .name │ ├── codeStyles/ │ │ ├── Project.xml │ │ └── codeStyleConfig.xml │ ├── compiler.xml │ ├── gradle.xml │ ├── jarRepositories.xml │ ├── misc.xml │ ├── render.experimental.xml │ ├── runConfigurations.xml │ ├── shelf/ │ │ ├── Uncommitted_changes_before_Checkout_at_25-01-2021_21_36_[Default_Changelist]/ │ │ │ └── shelved.patch │ │ ├── Uncommitted_changes_before_Checkout_at_25-01-2021_21_36__Default_Changelist_.xml │ │ ├── Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]/ │ │ │ └── shelved.patch │ │ ├── Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]1/ │ │ │ └── shelved.patch │ │ └── Uncommitted_changes_before_Update_at_30-12-2020_21_59__Default_Changelist_.xml │ └── vcs.xml ├── LICENSE ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── google-services.json │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── project/ │ │ └── farmingapp/ │ │ └── ExampleInstrumentedTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── project/ │ │ │ └── farmingapp/ │ │ │ ├── PrePaymentFragment.kt │ │ │ ├── adapter/ │ │ │ │ ├── ApmcAdapter.kt │ │ │ │ ├── ArticleListAdapter.kt │ │ │ │ ├── AttributesNormalAdapter.kt │ │ │ │ ├── AttributesSelectionAdapter.kt │ │ │ │ ├── CartItemsAdapter.kt │ │ │ │ ├── CurrentWeatherAdapter.kt │ │ │ │ ├── DashboardEcomItemAdapter.kt │ │ │ │ ├── EcommerceAdapter.kt │ │ │ │ ├── IntroAdapter.kt │ │ │ │ ├── MyOrdersAdapter.kt │ │ │ │ ├── PaginationListener.kt │ │ │ │ ├── PostListUserProfileAdapter.kt │ │ │ │ ├── SMPostListAdapter.kt │ │ │ │ ├── WeatherAdapter.kt │ │ │ │ └── YojnaAdapter.kt │ │ │ ├── model/ │ │ │ │ ├── APMCApi.kt │ │ │ │ ├── APMCRepository.kt │ │ │ │ ├── ArticleRepository.kt │ │ │ │ ├── AuthRepository.kt │ │ │ │ ├── WeatherApi.kt │ │ │ │ ├── WeatherRepository.kt │ │ │ │ └── data/ │ │ │ │ ├── APMCCustomRecords.kt │ │ │ │ ├── APMCMain.kt │ │ │ │ ├── APMCRecords.kt │ │ │ │ ├── CartItem.kt │ │ │ │ ├── IntroData.kt │ │ │ │ ├── Post.kt │ │ │ │ ├── Weather.kt │ │ │ │ ├── WeatherList.kt │ │ │ │ ├── WeatherMain.kt │ │ │ │ ├── WeatherRootList.kt │ │ │ │ ├── WeatherWind.kt │ │ │ │ └── orders.kt │ │ │ ├── utilities/ │ │ │ │ ├── CartItemBuy.kt │ │ │ │ ├── CellClickListener.kt │ │ │ │ └── ViewUtils.kt │ │ │ ├── view/ │ │ │ │ ├── apmc/ │ │ │ │ │ └── ApmcFragment.kt │ │ │ │ ├── articles/ │ │ │ │ │ ├── ArticleListFragment.kt │ │ │ │ │ ├── FruitsFragment.kt │ │ │ │ │ └── MachineFragment.kt │ │ │ │ ├── auth/ │ │ │ │ │ ├── LoginActivity.kt │ │ │ │ │ └── SignupActivity.kt │ │ │ │ ├── dashboard/ │ │ │ │ │ ├── DashboardActivity.kt │ │ │ │ │ └── DashboardFragment.kt │ │ │ │ ├── ecommerce/ │ │ │ │ │ ├── CartFragment.kt │ │ │ │ │ ├── EcommerceFragment.kt │ │ │ │ │ ├── EcommerceItemFragment.kt │ │ │ │ │ ├── MyOrdersFragment.kt │ │ │ │ │ ├── PaymentFragment.kt │ │ │ │ │ └── RazorPayActivity.kt │ │ │ │ ├── introscreen/ │ │ │ │ │ └── IntroActivity.kt │ │ │ │ ├── socialmedia/ │ │ │ │ │ ├── SMCreatePostFragment.kt │ │ │ │ │ └── SocialMediaPostsFragment.kt │ │ │ │ ├── user/ │ │ │ │ │ └── UserFragment.kt │ │ │ │ ├── weather/ │ │ │ │ │ └── WeatherFragment.kt │ │ │ │ └── yojna/ │ │ │ │ ├── YojnaFragment.kt │ │ │ │ └── YojnaListFragment.kt │ │ │ └── viewmodel/ │ │ │ ├── ArticleListener.kt │ │ │ ├── ArticleViewModel.kt │ │ │ ├── AuthListener.kt │ │ │ ├── AuthViewModel.kt │ │ │ ├── EcommViewModel.kt │ │ │ ├── SocialMediaViewModel.kt │ │ │ ├── UserDataViewModel.kt │ │ │ ├── UserProfilePostsViewModel.kt │ │ │ ├── WeatherListener.kt │ │ │ ├── WeatherViewModel.kt │ │ │ └── YojnaViewModel.kt │ │ └── res/ │ │ ├── anim/ │ │ │ ├── fade_scale.xml │ │ │ ├── fade_transition.xml │ │ │ └── fade_transition_opposite.xml │ │ ├── color/ │ │ │ └── chip_bg_states.xml │ │ ├── drawable/ │ │ │ ├── add_icon.xml │ │ │ ├── all_buttons.xml │ │ │ ├── apmc_card_bg.xml │ │ │ ├── chip_back.xml │ │ │ ├── dash_home.xml │ │ │ ├── ecommbackground.xml │ │ │ ├── ecommborder.xml │ │ │ ├── edit_back.xml │ │ │ ├── ic__keyboard_arrow_down.xml │ │ │ ├── ic_baseline_check_24.xml │ │ │ ├── ic_baseline_delete_forever_24.xml │ │ │ ├── ic_baseline_edit_24.xml │ │ │ ├── ic_baseline_local_shipping_24.xml │ │ │ ├── ic_baseline_photo_camera_24.xml │ │ │ ├── ic_baseline_shopping_cart_24.xml │ │ │ ├── ic_baseline_trending_up_24.xml │ │ │ ├── ic_high_temp.xml │ │ │ ├── ic_humidity.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_low_temp.xml │ │ │ ├── ic_user_profile.xml │ │ │ ├── indicator_active.xml │ │ │ ├── indicator_inactive.xml │ │ │ ├── minus_icon.xml │ │ │ ├── post_border.xml │ │ │ ├── post_logo.xml │ │ │ ├── progress_background.xml │ │ │ ├── round_borderless_general.xml │ │ │ ├── rounder_border_general.xml │ │ │ ├── table_border.xml │ │ │ ├── table_leftbottom_border.xml │ │ │ ├── table_lefttop_border.xml │ │ │ ├── table_rightbottom_border.xml │ │ │ ├── table_righttop_border.xml │ │ │ └── weather_rcyclr_bg.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── font/ │ │ │ ├── lato.xml │ │ │ ├── lato_bold.xml │ │ │ └── lato_light.xml │ │ ├── layout/ │ │ │ ├── activity_dashboard.xml │ │ │ ├── activity_intro.xml │ │ │ ├── activity_login.xml │ │ │ ├── activity_razor_pay.xml │ │ │ ├── activity_signup.xml │ │ │ ├── apmc_single_list.xml │ │ │ ├── app_bar_main.xml │ │ │ ├── article_list_single.xml │ │ │ ├── fragment_apmc.xml │ │ │ ├── fragment_article_list.xml │ │ │ ├── fragment_cart.xml │ │ │ ├── fragment_dashboard.xml │ │ │ ├── fragment_ecommerce.xml │ │ │ ├── fragment_ecommerce_item.xml │ │ │ ├── fragment_fruits.xml │ │ │ ├── fragment_machine.xml │ │ │ ├── fragment_my_orders.xml │ │ │ ├── fragment_payment.xml │ │ │ ├── fragment_pre_payment.xml │ │ │ ├── fragment_s_m_create_post.xml │ │ │ ├── fragment_social_media_posts.xml │ │ │ ├── fragment_user.xml │ │ │ ├── fragment_weather.xml │ │ │ ├── fragment_yojna.xml │ │ │ ├── fragment_yojna_list.xml │ │ │ ├── item_loading.xml │ │ │ ├── nav_header.xml │ │ │ ├── post_with_image_sm.xml │ │ │ ├── similarproductlist.xml │ │ │ ├── single_cart_item.xml │ │ │ ├── single_currentweather.xml │ │ │ ├── single_dashboard_ecomm_item.xml │ │ │ ├── single_ecomm_item.xml │ │ │ ├── single_myorder_item.xml │ │ │ ├── single_normal_attributes_ecomm.xml │ │ │ ├── single_selection_attributes_ecomm.xml │ │ │ ├── single_slider_screen.xml │ │ │ ├── single_weather.xml │ │ │ ├── single_yojna_list.xml │ │ │ └── user_profile_posts_single.xml │ │ ├── menu/ │ │ │ ├── cart_menu.xml │ │ │ ├── dash_menu.xml │ │ │ └── nav_drawer_menu.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── font_certs.xml │ │ ├── preloaded_fonts.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test/ │ └── java/ │ └── com/ │ └── project/ │ └── farmingapp/ │ └── ExampleUnitTest.kt ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ *.iml .gradle /local.properties /.idea/caches /.idea/libraries /.idea/modules.xml /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml .DS_Store /build /captures .externalNativeBuild .cxx ================================================ FILE: .idea/.name ================================================ Farming App ================================================ FILE: .idea/codeStyles/Project.xml ================================================
xmlns:android ^$
xmlns:.* ^$ BY_NAME
.*:id http://schemas.android.com/apk/res/android
.*:name http://schemas.android.com/apk/res/android
name ^$
style ^$
.* ^$ BY_NAME
.* http://schemas.android.com/apk/res/android ANDROID_ATTRIBUTE_ORDER
.* .* BY_NAME
================================================ FILE: .idea/codeStyles/codeStyleConfig.xml ================================================ ================================================ FILE: .idea/compiler.xml ================================================ ================================================ FILE: .idea/gradle.xml ================================================ ================================================ FILE: .idea/jarRepositories.xml ================================================ ================================================ FILE: .idea/misc.xml ================================================ ================================================ FILE: .idea/render.experimental.xml ================================================ ================================================ FILE: .idea/runConfigurations.xml ================================================ ================================================ FILE: .idea/shelf/Uncommitted_changes_before_Checkout_at_25-01-2021_21_36_[Default_Changelist]/shelved.patch ================================================ Index: .idea/misc.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>\r\n\r\n \r\n \r\n \r\n \r\n \r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- .idea/misc.xml (revision 10b3406bcaf78db23f771ddbc45bfbe5986f0031) +++ .idea/misc.xml (date 1611590755469) @@ -1,6 +1,6 @@ - + ================================================ FILE: .idea/shelf/Uncommitted_changes_before_Checkout_at_25-01-2021_21_36__Default_Changelist_.xml ================================================ ================================================ FILE: .idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]/shelved.patch ================================================ Index: app/src/main/java/com/project/farmingapp/viewmodel/AuthViewModel.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>package com.project.farmingapp.viewmodel\r\n\r\nimport android.view.View\r\nimport androidx.lifecycle.ViewModel\r\nimport com.project.farmingapp.model.AuthRepository\r\n\r\nclass AuthViewModel : ViewModel() {\r\n\r\n var name: String? = null\r\n var mobNo: String? = null\r\n var email: String? = null\r\n var city: String? = null\r\n var password: String? = null\r\n var confPassword: String? = null\r\n var userType:String? = \"normal\"\r\n var authListener: AuthListener? = null\r\n\r\n fun signupButtonClicked(view: View) {\r\n authListener!!.onStarted()\r\n if (name.isNullOrEmpty() || mobNo.toString().length != 10 || mobNo == null || password.isNullOrEmpty() || confPassword.isNullOrEmpty() || city.isNullOrEmpty()) {\r\n // Failure\r\n authListener!!.onFailure(\"Error Occurred\")\r\n return\r\n }\r\n // Success\r\n var data = hashMapOf(\r\n \"name\" to name,\r\n \"mobNo\" to mobNo,\r\n \"email\" to email,\r\n \"city\" to city,\r\n \"userType\" to userType\r\n )\r\n val authRepo = AuthRepository().signInWithEmail(email!!, password!!, data)\r\n\r\n authListener?.onSuccess(authRepo)\r\n\r\n }\r\n\r\n fun googleSignupButtonClicked(view: View) {\r\n //\r\n\r\n// val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)\r\n// .requestIdToken(getString(R.string.default_web_client_id))\r\n// .requestEmail()\r\n// .build()\r\n// googleSignInClient = GoogleSignIn.getClient(this, gso)\r\n\r\n\r\n }\r\n\r\n\r\n} Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- app/src/main/java/com/project/farmingapp/viewmodel/AuthViewModel.kt (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ app/src/main/java/com/project/farmingapp/viewmodel/AuthViewModel.kt (date 1609342945111) @@ -15,6 +15,9 @@ var userType:String? = "normal" var authListener: AuthListener? = null + var loginmail:String?=null + var loginpwd:String?=null + fun signupButtonClicked(view: View) { authListener!!.onStarted() if (name.isNullOrEmpty() || mobNo.toString().length != 10 || mobNo == null || password.isNullOrEmpty() || confPassword.isNullOrEmpty() || city.isNullOrEmpty()) { @@ -48,5 +51,20 @@ } +//bharat try new2 + + fun loginButtonClicked(view: View) { + authListener!!.onStarted() + if (loginmail.isNullOrEmpty() || loginpwd.isNullOrEmpty()) { + // Failure + authListener!!.onFailure("Error Occurred") + return + } + // Success + val authRepo = AuthRepository().loginWithEmail(loginmail!!, loginpwd!!) + + authListener?.onSuccess(authRepo) + + } } \ No newline at end of file Index: app/src/main/AndroidManifest.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>\r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- app/src/main/AndroidManifest.xml (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ app/src/main/AndroidManifest.xml (date 1609342664080) @@ -11,13 +11,15 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - - + + + + + + - - - - + + Index: app/src/main/java/com/project/farmingapp/view/auth/LoginActivity.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>package com.project.farmingapp.view.auth\r\n\r\nimport android.content.Intent\r\nimport androidx.appcompat.app.AppCompatActivity\r\nimport android.os.Bundle\r\nimport com.project.farmingapp.R\r\nimport kotlinx.android.synthetic.main.activity_login.*\r\n\r\nclass LoginActivity : AppCompatActivity() {\r\n override fun onCreate(savedInstanceState: Bundle?) {\r\n super.onCreate(savedInstanceState)\r\n setContentView(R.layout.activity_login)\r\n\r\n createaccountText.setOnClickListener {\r\n Intent(this, SignupActivity::class.java).also {\r\n startActivity(it)\r\n }\r\n }\r\n\r\n }\r\n} Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- app/src/main/java/com/project/farmingapp/view/auth/LoginActivity.kt (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ app/src/main/java/com/project/farmingapp/view/auth/LoginActivity.kt (date 1609343274046) @@ -3,13 +3,32 @@ import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import androidx.databinding.DataBindingUtil +import androidx.lifecycle.LiveData +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProviders import com.project.farmingapp.R +import com.project.farmingapp.databinding.ActivityLoginBinding +import com.project.farmingapp.databinding.ActivitySignupBinding +import com.project.farmingapp.utilities.hide +import com.project.farmingapp.utilities.show +import com.project.farmingapp.utilities.toast +import com.project.farmingapp.viewmodel.AuthListener +import com.project.farmingapp.viewmodel.AuthViewModel import kotlinx.android.synthetic.main.activity_login.* +import kotlinx.android.synthetic.main.activity_signup.* -class LoginActivity : AppCompatActivity() { +class LoginActivity : AppCompatActivity(),AuthListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_login) + + + val binding: ActivityLoginBinding = + DataBindingUtil.setContentView(this, R.layout.activity_login) + val viewModel = ViewModelProviders.of(this).get(AuthViewModel::class.java) + binding.authViewModel = viewModel + + viewModel.authListener = this createaccountText.setOnClickListener { Intent(this, SignupActivity::class.java).also { @@ -18,4 +37,22 @@ } } + + override fun onStarted() { + progressLogin.show() + } + + override fun onSuccess(authRepo: LiveData) { + authRepo.observe(this, Observer { + progressLogin.hide() + if (it.toString() == "Success") { + toast("Login successful") + } + }) + } + + override fun onFailure(message: String) { + progressLogin.hide() + toast("Failure") + } } \ No newline at end of file Index: app/src/main/java/com/project/farmingapp/model/AuthRepository.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>package com.project.farmingapp.model\r\n\r\nimport android.content.Intent\r\nimport android.util.Log\r\nimport android.widget.Toast\r\nimport androidx.lifecycle.LiveData\r\nimport androidx.lifecycle.MutableLiveData\r\nimport com.google.android.gms.auth.api.signin.GoogleSignInClient\r\nimport com.google.firebase.auth.FirebaseAuth\r\nimport com.google.firebase.firestore.FirebaseFirestore\r\n\r\nclass AuthRepository {\r\n\r\n lateinit var googleSignInClient: GoogleSignInClient\r\n val firebaseAuth = FirebaseAuth.getInstance()\r\n lateinit var firebaseDb: FirebaseFirestore\r\n fun signInWithEmail(email: String, password: String, otherData: HashMap): LiveData {\r\n\r\n firebaseDb = FirebaseFirestore.getInstance()\r\n val data = MutableLiveData()\r\n val data2 = MutableLiveData()\r\n firebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener {\r\n if (it.isSuccessful) {\r\n\r\n// Log.d(\"AuthRepo\", it.result!!.additionalUserInfo.toString())\r\n// Log.d(\"AuthRepo2\", data.value)\r\n\r\n firebaseDb!!.collection(\"users\").document(\"${email}\")\r\n .set(otherData)\r\n .addOnSuccessListener {\r\n data.value = \"Success\"\r\n// Toast.makeText(this, \"Data added\", Toast.LENGTH_SHORT).show()\r\n// Intent(this, LoginActivity::class.java).also {\r\n// startActivity(it)\r\n// }\r\n// data2.value = \"Success\"\r\n }\r\n .addOnFailureListener { Exception ->\r\n {\r\n data.value = \"Failure\"\r\n// data2.value = \"Failure\"\r\n// Toast.makeText(this, \"Error: ${Exception}\", Toast.LENGTH_SHORT).show()\r\n }\r\n }\r\n\r\n } else if (it.isCanceled) {\r\n\r\n }\r\n\r\n }.addOnFailureListener {\r\n Log.d(\"AuthRepo\", it.message)\r\n data.value = it.message\r\n }\r\n\r\n return data\r\n }\r\n\r\n fun signInGoogle(){\r\n\r\n// val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)\r\n// .requestIdToken(getString(R.string.default_web_client_id))\r\n// .requestEmail()\r\n// .build()\r\n// googleSignInClient = GoogleSignIn.getClient(this, gso)\r\n\r\n }\r\n\r\n} Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- app/src/main/java/com/project/farmingapp/model/AuthRepository.kt (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ app/src/main/java/com/project/farmingapp/model/AuthRepository.kt (date 1609345661739) @@ -65,4 +65,31 @@ } + + //bharat try new code here + fun loginWithEmail(email: String, password: String): LiveData { + + firebaseDb = FirebaseFirestore.getInstance() + val data = MutableLiveData() + firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener { + if (it.isSuccessful) { + data.value="Success" + +// Log.d("AuthRepo", it.result!!.additionalUserInfo.toString()) +// Log.d("AuthRepo2", data.value) + + + } else if (it.isCanceled) { + + } + + }.addOnFailureListener { + Log.d("AuthRepo", it.message) + data.value = it.message + } + + return data + } + + } \ No newline at end of file Index: app/src/main/res/layout/activity_login.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>\r\n\r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \" />\r\n\r\n \r\n \r\n\r\n\r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- app/src/main/res/layout/activity_login.xml (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ app/src/main/res/layout/activity_login.xml (date 1609342862034) @@ -69,6 +69,7 @@ app:layout_constraintVertical_bias="0.0"> - + \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- .idea/jarRepositories.xml (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ .idea/jarRepositories.xml (date 1609303744590) @@ -21,5 +21,10 @@ \ No newline at end of file Index: .idea/gradle.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>\r\n\r\n \r\n \r\n \r\n \r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- .idea/gradle.xml (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ .idea/gradle.xml (date 1609303744597) @@ -15,6 +15,7 @@ Index: build.gradle IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>// Top-level build file where you can add configuration options common to all sub-projects/modules.\r\nbuildscript {\r\n ext.kotlin_version = \"1.3.72\"\r\n repositories {\r\n google()\r\n jcenter()\r\n }\r\n dependencies {\r\n\r\n classpath \"com.android.tools.build:gradle:4.0.1\"\r\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\r\n\r\n // NOTE: Do not place your application dependencies here; they belong\r\n classpath 'com.google.gms:google-services:4.3.4'\r\n // in the individual module build.gradle files\r\n classpath \"androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0-alpha05\"\r\n }\r\n}\r\n\r\nallprojects {\r\n repositories {\r\n google()\r\n jcenter()\r\n }\r\n}\r\n\r\ntask clean(type: Delete) {\r\n delete rootProject.buildDir\r\n} Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- build.gradle (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ build.gradle (date 1609303727423) @@ -21,6 +21,7 @@ repositories { google() jcenter() + } } Index: .idea/misc.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>\r\n\r\n \r\n \r\n \r\n \r\n \r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- .idea/misc.xml (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ .idea/misc.xml (date 1609303801213) @@ -1,6 +1,6 @@ - + Index: app/build.gradle IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP <+>apply plugin: 'com.android.application'\r\napply plugin: 'kotlin-android'\r\napply plugin: 'kotlin-android-extensions'\r\napply plugin: 'kotlin-kapt'\r\napply plugin: \"androidx.navigation.safeargs\"\r\napply plugin: 'com.google.gms.google-services'\r\n\r\n\r\nandroid {\r\n compileSdkVersion 29\r\n buildToolsVersion \"29.0.2\"\r\n\r\n defaultConfig {\r\n applicationId \"com.project.farmingapp\"\r\n minSdkVersion 21\r\n targetSdkVersion 29\r\n versionCode 1\r\n versionName \"1.0\"\r\n\r\n testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\r\n }\r\n\r\n buildTypes {\r\n release {\r\n minifyEnabled false\r\n proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\r\n }\r\n }\r\n dataBinding {\r\n enabled = true\r\n }\r\n}\r\n\r\ndependencies {\r\n\r\n\r\n implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\r\n implementation \"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version\"\r\n implementation 'androidx.core:core-ktx:1.3.2'\r\n implementation 'androidx.appcompat:appcompat:1.2.0'\r\n implementation 'androidx.constraintlayout:constraintlayout:2.0.4'\r\n implementation 'com.google.android.gms:play-services-auth:19.0.0'\r\n implementation 'com.google.firebase:firebase-auth:16.0.5'\r\n testImplementation 'junit:junit:4.12'\r\n androidTestImplementation 'androidx.test.ext:junit:1.1.2'\r\n androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'\r\n\r\n\r\n // retrofit and GSON\r\n implementation 'com.squareup.retrofit2:retrofit:2.6.0'\r\n implementation 'com.squareup.retrofit2:converter-gson:2.6.0'\r\n\r\n // Kotlin coroutines\r\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'\r\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1'\r\n\r\n // ViewModel and LiveData\r\n implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'\r\n\r\n\r\n// New Material Design\r\n implementation 'com.google.android.material:material:1.1.0-alpha07'\r\n\r\n // Kodein Dependency Injection\r\n implementation 'org.kodein.di:kodein-di-generic-jvm:6.2.1'\r\n implementation 'org.kodein.di:kodein-di-framework-android-x:6.2.1'\r\n\r\n // Android Room\r\n implementation 'androidx.room:room-runtime:2.1.0-rc01'\r\n implementation 'androidx.room:room-ktx:2.1.0-rc01'\r\n kapt 'androidx.room:room-compiler:2.1.0-rc01'\r\n\r\n// Android Navigation Architecture\r\n implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0-alpha05'\r\n implementation 'androidx.navigation:navigation-ui-ktx:2.1.0-alpha05'\r\n\r\n implementation platform('com.google.firebase:firebase-bom:26.2.0')\r\n implementation 'com.google.firebase:firebase-firestore:21.5.0'\r\n implementation 'com.google.firebase:firebase-storage:19.1.1'\r\n implementation 'com.google.android.gms:play-services-auth:19.0.0'\r\n}\r\n Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- app/build.gradle (revision d0dcb8b4662cad8592336090eac9f8e56ae7147e) +++ app/build.gradle (date 1609327434558) @@ -41,6 +41,7 @@ implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'com.google.android.gms:play-services-auth:19.0.0' implementation 'com.google.firebase:firebase-auth:16.0.5' + implementation 'com.google.firebase:firebase-firestore-ktx:22.0.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' ================================================ FILE: .idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]1/shelved.patch ================================================ ================================================ FILE: .idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59__Default_Changelist_.xml ================================================ ================================================ FILE: .idea/vcs.xml ================================================ ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021 Het Suthar Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # 👨‍🌾 Agri India - One stop application for Indian Farmers ✒️ This is an Android Application designed for our Indian farmers. ✒️ The technology has become a part and parcel of everyone's life and it is also helping us to make our daily tasks easy. We identified that in the Agriculture sector, the farmers are still lacking the best technology use cases. ✒️ There are thousands of applications in the markets for farmers but they only provide the limited features. ✒️ The main reason for creating this application was to combine every possible feature into the single app. This will remove the burden of managing multiple account and apps for farmers. The application is also designed in such a way that it will be easy to use.

## ✨ Features: - Government Yojna Awareness - E-commerce Platform - Daily APMC Price Updates - Community Network (Social Media) - Reading articles based on categories - Weather Forecasting

## 📱 Technologies / Tools used for building this app includes: | Android Studio | Firebase | Kotlin | External APIs | Android OS | | --- | --- | --- | --- | --- | ## 🤩 Designs: ## 😀 If you liked the app, Please give it a ⭐ and fork the repository. 🤚🏻 ================================================ FILE: app/.gitignore ================================================ /build ================================================ FILE: app/build.gradle ================================================ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: "androidx.navigation.safeargs" apply plugin: 'com.google.gms.google-services' repositories { mavenCentral() flatDir { dirs 'libs' } } android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.project.farmingapp" minSdkVersion 21 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } dataBinding { enabled = true } } dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'com.google.android.gms:play-services-auth:19.0.0' implementation 'com.google.firebase:firebase-auth:16.0.5' implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' // retrofit and GSON implementation 'com.squareup.retrofit2:retrofit:2.6.0' implementation 'com.squareup.retrofit2:converter-gson:2.6.0' // Kotlin coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1' // ViewModel and LiveData implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' //Location implementation 'com.google.android.gms:play-services-location:18.0.0' // New Material Design implementation 'com.google.android.material:material:1.1.0-alpha07' // Kodein Dependency Injection implementation 'org.kodein.di:kodein-di-generic-jvm:6.2.1' implementation 'org.kodein.di:kodein-di-framework-android-x:6.2.1' // Android Room implementation 'androidx.room:room-runtime:2.1.0-rc01' implementation 'androidx.room:room-ktx:2.1.0-rc01' kapt 'androidx.room:room-compiler:2.1.0-rc01' // Android Navigation Architecture implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0-alpha05' implementation 'androidx.navigation:navigation-ui-ktx:2.1.0-alpha05' implementation platform('com.google.firebase:firebase-bom:26.2.0') implementation 'com.google.firebase:firebase-firestore:21.5.0' implementation 'com.google.firebase:firebase-storage:19.1.1' implementation 'com.google.android.gms:play-services-auth:19.0.0' //Picasso implementation 'com.squareup.picasso:picasso:2.71828' //Glide implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' implementation 'com.littlemango:stacklayoutmanager:1.0.5' implementation 'com.azoft.carousellayoutmanager:carousel:1.4.4' implementation "com.jakewharton:butterknife:10.1.0" annotationProcessor "com.jakewharton:butterknife-compiler:10.1.0" //carossal implementation 'com.github.mohan-dev1248:PosterSlider:1.0.2' //Realtime implementation 'com.google.firebase:firebase-database-ktx' //RazorPay implementation 'com.razorpay:checkout:1.5.16' } ================================================ FILE: app/google-services.json ================================================ { "project_info": { "project_number": "1089918384238", "project_id": "farming-app-2fc2a", "storage_bucket": "farming-app-2fc2a.appspot.com" }, "client": [ { "client_info": { "mobilesdk_app_id": "1:1089918384238:android:4c17926368f206dcd48e7f", "android_client_info": { "package_name": "com.project.farmingapp" } }, "oauth_client": [ { "client_id": "1089918384238-fiogt24o945tpa23267nhvapi7jic8jj.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { "current_key": "AIzaSyAm2wobnn3z6sp6QD5uMcmlQMm2MzXTLgE" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [ { "client_id": "1089918384238-fiogt24o945tpa23267nhvapi7jic8jj.apps.googleusercontent.com", "client_type": 3 } ] } } } ], "configuration_version": "1" } ================================================ FILE: app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # 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 *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile ================================================ FILE: app/src/androidTest/java/com/project/farmingapp/ExampleInstrumentedTest.kt ================================================ package com.project.farmingapp import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Test import org.junit.runner.RunWith import org.junit.Assert.* /** * Instrumented test, which will execute on an Android device. * * See [testing documentation](http://d.android.com/tools/testing). */ @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("com.project.farmingapp", appContext.packageName) } } ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/java/com/project/farmingapp/PrePaymentFragment.kt ================================================ package com.project.farmingapp import android.app.Activity import android.content.Intent import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import com.project.farmingapp.view.ecommerce.RazorPayActivity import com.razorpay.Checkout import com.razorpay.PaymentResultListener import kotlinx.android.synthetic.main.fragment_pre_payment.* import org.json.JSONObject // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [PrePaymentFragment.newInstance] factory method to * create an instance of this fragment. */ class PrePaymentFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_pre_payment, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment PrePaymentFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = PrePaymentFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/ApmcAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.project.farmingapp.R import com.project.farmingapp.model.data.APMCCustomRecords import com.project.farmingapp.model.data.APMCMain import com.project.farmingapp.model.data.APMCRecords class ApmcAdapter(val context: Context, val data: List) : RecyclerView.Adapter() { class ApmcViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var market = itemView.findViewById(R.id.apmcNameValue) var location = itemView.findViewById(R.id.apmcLocationValue) var commodity = itemView.findViewById(R.id.comodityname) var min = itemView.findViewById(R.id.minvalue) var max = itemView.findViewById(R.id.maxvalue) // var modal=itemView.findViewById(R.id.modalValueTextApmc) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ApmcViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.apmc_single_list, parent, false) return ApmcViewHolder(view) } override fun getItemCount(): Int { return data.size } override fun onBindViewHolder(holder: ApmcViewHolder, position: Int) { val mainData = data[position] holder.market.text = mainData.market holder.location.text = mainData.district + " , " + mainData.state for (i in mainData.commodity) { holder.commodity.text = holder.commodity.text .toString()+ i + "\n" } holder.commodity.text = holder.commodity.text.toString().trimEnd() for (i in mainData.min_price){ holder.min.text = holder.min.text.toString() + i + "\n" } holder.min.text = holder.min.text.toString().trimEnd() for(i in mainData.max_price){ holder.max.text = holder.max.text.toString() + i + "\n" } holder.max.text = holder.max.text.toString().trimEnd() // holder.modal.text=mainData.modal_price } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/ArticleListAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.AbsListView import android.widget.AdapterView import android.widget.ImageView import android.widget.TextView import androidx.cardview.widget.CardView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions import com.google.firebase.firestore.DocumentSnapshot import com.project.farmingapp.R import com.project.farmingapp.model.data.WeatherList import com.project.farmingapp.utilities.CellClickListener import org.kodein.di.android.androidCoreContextTranslators import kotlin.math.round class ArticleListAdapter(val context: Context, val articleListData: List, private val cellClickListener: CellClickListener): RecyclerView.Adapter() { class ArticleListViewholder(itemView: View): RecyclerView.ViewHolder(itemView){ var articleName = itemView.findViewById(R.id.descTextxArticleListFrag) var articleImage = itemView.findViewById(R.id.imageArticleListFrag) var articleCard = itemView.findViewById(R.id.articleListCardArtListFrag) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleListViewholder { val view = LayoutInflater.from(context).inflate(R.layout.article_list_single, parent, false) return ArticleListAdapter.ArticleListViewholder(view) } override fun getItemCount(): Int { return articleListData.size } override fun onBindViewHolder(holder: ArticleListViewholder, position: Int) { val singleArticle = articleListData[position] holder.articleName.text = singleArticle.data!!.get("title").toString() holder.articleCard.setOnClickListener { cellClickListener.onCellClickListener(singleArticle.data!!.get("title").toString()) } var list : List = singleArticle.data!!.get("images") as List Glide.with(holder.itemView.context) .load(list[0]) // .apply(RequestOptions.bitmapTransform( // RoundedCorners(20) // )) .into(holder.articleImage) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/AttributesNormalAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.text.Layout import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.project.farmingapp.R import kotlinx.android.synthetic.main.single_normal_attributes_ecomm.view.* class AttributesNormalAdapter(val context: Context, val allData : List>): RecyclerView.Adapter() { class AttributesNormalViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){ } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AttributesNormalViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.single_normal_attributes_ecomm, parent, false) return AttributesNormalAdapter.AttributesNormalViewHolder(view) } override fun getItemCount(): Int { return allData.size } override fun onBindViewHolder(holder: AttributesNormalViewHolder, position: Int) { val currentData = allData[position] for((key, value) in currentData){ holder.itemView.normalAttributeTitle.text = key.toString() + " - " holder.itemView.normalAttributeValue.text = value.toString() } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/AttributesSelectionAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.graphics.Color import android.graphics.Typeface import android.text.style.TypefaceSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.recyclerview.widget.RecyclerView import com.project.farmingapp.R import com.project.farmingapp.utilities.CellClickListener import kotlinx.android.synthetic.main.single_selection_attributes_ecomm.view.* class AttributesSelectionAdapter(var context: Context, var allData: List>, private val cellClickListener: CellClickListener): RecyclerView.Adapter() { class AttributesSelectionViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){ } override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): AttributesSelectionViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.single_selection_attributes_ecomm, parent, false) return AttributesSelectionAdapter.AttributesSelectionViewHolder(view) } override fun getItemCount(): Int { return allData.size } override fun onBindViewHolder(holder: AttributesSelectionViewHolder, position: Int) { val currentData = allData[position] as Map for ((key, values) in currentData){ cellClickListener.onCellClickListener("1 ${key}") holder.itemView.attributeTitle.text = key var allValues = values as ArrayList var currentValue = allValues[0].toString().split(" ") holder.itemView.attribute1.text = currentValue[0].toString() holder.itemView.attribute1Price.text = currentValue[1].toString() currentValue = allValues[1].toString().split(" ") holder.itemView.attribute2.text = currentValue[0].toString() holder.itemView.attribute2Price.text = currentValue[1].toString() currentValue = allValues[2].toString().split(" ") holder.itemView.attribute3.text = currentValue[0].toString() holder.itemView.attribute3Price.text = currentValue[1].toString() // holder.itemView.attribute1.text = currentValue[0].toString() // holder.itemView.attribute1Price.text = currentValue[1].toString() holder.itemView.cardSize1.setOnClickListener { cellClickListener.onCellClickListener("1 ${key}") Toast.makeText(context, "You Clicked 1", Toast.LENGTH_SHORT).show() holder.itemView.cardSize1.backgroundTintList = context.getResources().getColorStateList(R.color.colorPrimary) holder.itemView.attribute1.setTextColor(Color.parseColor("#FFFFFF")) holder.itemView.attribute1Price.setTextColor(Color.parseColor("#FFFFFF")) holder.itemView.attribute1.setTypeface(null, Typeface.BOLD) holder.itemView.attribute1Price.setTypeface(null, Typeface.BOLD) holder.itemView.cardSize2.backgroundTintList = context.getResources().getColorStateList(R.color.secondary) holder.itemView.attribute2.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute2Price.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute2.setTypeface(null, Typeface.NORMAL) holder.itemView.attribute2Price.setTypeface(null, Typeface.NORMAL) holder.itemView.cardSize3.backgroundTintList = context.getResources().getColorStateList(R.color.secondary) holder.itemView.attribute3.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute3Price.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute3.setTypeface(null, Typeface.NORMAL) holder.itemView.attribute3Price.setTypeface(null, Typeface.NORMAL) } holder.itemView.cardSize2.setOnClickListener { cellClickListener.onCellClickListener("2 ${key}") holder.itemView.cardSize2.backgroundTintList = context.getResources().getColorStateList(R.color.colorPrimary) holder.itemView.attribute2.setTextColor(Color.parseColor("#FFFFFF")) holder.itemView.attribute2Price.setTextColor(Color.parseColor("#FFFFFF")) holder.itemView.attribute2.setTypeface(null, Typeface.BOLD) holder.itemView.attribute2Price.setTypeface(null, Typeface.BOLD) holder.itemView.cardSize3.backgroundTintList = context.getResources().getColorStateList(R.color.secondary) holder.itemView.attribute3.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute3Price.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute3.setTypeface(null, Typeface.NORMAL) holder.itemView.attribute3Price.setTypeface(null, Typeface.NORMAL) holder.itemView.cardSize1.backgroundTintList = context.getResources().getColorStateList(R.color.secondary) holder.itemView.attribute1.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute1Price.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute1.setTypeface(null, Typeface.NORMAL) holder.itemView.attribute1Price.setTypeface(null, Typeface.NORMAL) Toast.makeText(context, "You Clicked 2", Toast.LENGTH_SHORT).show() } holder.itemView.cardSize3.setOnClickListener { cellClickListener.onCellClickListener("3 ${key}") Toast.makeText(context, "You Clicked 3", Toast.LENGTH_SHORT).show() holder.itemView.cardSize3.backgroundTintList = context.getResources().getColorStateList(R.color.colorPrimary) holder.itemView.attribute3.setTextColor(Color.parseColor("#FFFFFF")) holder.itemView.attribute3Price.setTextColor(Color.parseColor("#FFFFFF")) holder.itemView.attribute3.setTypeface(null, Typeface.BOLD) holder.itemView.attribute3Price.setTypeface(null, Typeface.BOLD) holder.itemView.cardSize1.backgroundTintList = context.getResources().getColorStateList(R.color.secondary) holder.itemView.attribute1.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute1Price.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute1.setTypeface(null, Typeface.NORMAL) holder.itemView.attribute1Price.setTypeface(null, Typeface.NORMAL) holder.itemView.cardSize2.backgroundTintList = context.getResources().getColorStateList(R.color.secondary) holder.itemView.attribute2.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute2Price.setTextColor(Color.parseColor("#FF404A3A")) holder.itemView.attribute2.setTypeface(null, Typeface.NORMAL) holder.itemView.attribute2Price.setTypeface(null, Typeface.NORMAL) } } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/CartItemsAdapter.kt ================================================ package com.project.farmingapp.adapter import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.Observer import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.firebase.auth.FirebaseAuth import com.google.firebase.database.FirebaseDatabase import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.R import com.project.farmingapp.utilities.CartItemBuy import com.project.farmingapp.view.ecommerce.CartFragment import com.project.farmingapp.viewmodel.EcommViewModel import kotlinx.android.synthetic.main.single_cart_item.view.* class CartItemsAdapter( val context: CartFragment, val allData: HashMap, val cartitembuy: CartItemBuy ) : RecyclerView.Adapter() { var itemCost = 0 var deliveryCharge = 0 var quantity = 0 class CartItemsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartItemsViewHolder { val view = LayoutInflater.from(context.context).inflate(R.layout.single_cart_item, parent, false) return CartItemsAdapter.CartItemsViewHolder(view) } override fun getItemCount(): Int { return allData.size } override fun onBindViewHolder(holder: CartItemsViewHolder, position: Int) { val currentData = allData.entries.toTypedArray()[position] val firebaseFirestore = FirebaseFirestore.getInstance() val firebaseDatabase = FirebaseDatabase.getInstance() val firebaseAuth = FirebaseAuth.getInstance() val itemQtyRef = firebaseDatabase.getReference("${firebaseAuth.currentUser!!.uid}").child("cart") .child("${currentData.key}").child("quantity") val itemRef = firebaseDatabase.getReference("${firebaseAuth.currentUser!!.uid}").child("cart") .child("${currentData.key}") holder.itemView.cartItemBuyBtn.setOnClickListener { var qty = holder.itemView.quantityCountEcomm.text.toString().toInt() var itemPrice = holder.itemView.itemPriceCart.text.toString().split("₹") as ArrayList var deliveryCharge = holder.itemView.deliveryChargeCart.text.toString().toInt() Log.d("totalPrice", quantity.toString()) Log.d("totalPrice", itemCost.toString()) Log.d("totalPrice", deliveryCharge.toString()) cartitembuy.addToOrders("${currentData.key}", qty,itemPrice[1].toInt() , deliveryCharge) } holder.itemView.removeCartBtn.setOnClickListener { itemRef.removeValue() } holder.itemView.increaseQtyBtn.setOnClickListener { holder.itemView.quantityCountEcomm.text = (holder.itemView.quantityCountEcomm.text.toString().toInt() + 1).toString() itemQtyRef.setValue(holder.itemView.quantityCountEcomm.text.toString().toInt()) } holder.itemView.decreaseQtyBtn.setOnClickListener { if (holder.itemView.quantityCountEcomm.text.toString().toInt() != 1) { holder.itemView.quantityCountEcomm.text = (holder.itemView.quantityCountEcomm.text.toString().toInt() - 1).toString() itemQtyRef.setValue(holder.itemView.quantityCountEcomm.text.toString().toInt()) } } val curr = currentData.value as Map val ecommViewModel = EcommViewModel() ecommViewModel.getSpecificItem("${currentData.key}").observe(context, Observer { itemCost = it.get("price").toString().toInt() deliveryCharge = it.get("delCharge").toString().toInt() quantity = curr.get("quantity").toString().toInt() holder.itemView.itemNameCart.text = it.getString("title").toString() holder.itemView.itemPriceCart.text = "\u20B9" + itemCost.toString() holder.itemView.quantityCountEcomm.text = quantity.toString() holder.itemView.deliveryChargeCart.text = deliveryCharge.toString() holder.itemView.cartItemFirm.text = it.get("retailer").toString() holder.itemView.cartItemAvailability.text = it.get("availability").toString() val allImages = it.get("imageUrl") as ArrayList Glide.with(context).load(allImages[0].toString()).into(holder.itemView.cartItemImage) holder.itemView.cartItemBuyBtn.text = "Buy Now: " + "\u20B9" + (itemCost!!*curr.get("quantity").toString().toInt() + deliveryCharge!!).toString() }) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/CurrentWeatherAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils import android.widget.ImageView import android.widget.TextView import android.widget.Toast import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.project.farmingapp.R import com.project.farmingapp.model.data.WeatherList import kotlinx.android.synthetic.main.post_with_image_sm.view.* import kotlinx.android.synthetic.main.single_currentweather.view.* class CurrentWeatherAdapter(val context: Context, val weatherrootdatas:List): RecyclerView.Adapter() { class CurrentWeatherViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { var Ctemp=itemView.findViewById(R.id.temp) var Cwedesc=itemView.findViewById(R.id.desc) var Cwelogo=itemView.findViewById(R.id.icon) var CminTemp=itemView.findViewById(R.id.minTemp) var CmaxTemp=itemView.findViewById(R.id.maxTemp) var Chumidity=itemView.findViewById(R.id.humidity) var CtodayTitle=itemView.findViewById(R.id.todayTitle) var continer = itemView.findViewById(R.id.currentWeatherContainer) } override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): CurrentWeatherAdapter.CurrentWeatherViewHolder { val view= LayoutInflater.from(context).inflate(R.layout.single_currentweather,parent,false) return CurrentWeatherAdapter.CurrentWeatherViewHolder(view) } override fun getItemCount(): Int { return weatherrootdatas.size } override fun onBindViewHolder(holder: CurrentWeatherAdapter.CurrentWeatherViewHolder, position: Int) { val weathernew =weatherrootdatas[position] holder.Ctemp.text = (weathernew.main.temp - 273.15).toInt().toString() + "\u2103" holder.Cwedesc.text = weathernew.weather[0].description.toString().capitalize() holder.CtodayTitle.text = "Today, " + weathernew.dt_txt.toString().slice(10..15) Log.d("Something", weathernew.dt_txt.toString().slice(10..-1)) // var tempMin = "" // for(a in weathernew.main.temp_min){ // } var ss = weathernew.main.temp_min.length holder.CminTemp.text = (weathernew.main.temp_min.toDouble() - 273.1).toInt().toString()+ "\u2103" // holder.continer.animation = AnimationUtils.loadAnimation(context, R.anim.fade_scale) // holder.itemView.setOnFocusChangeListener { view, b -> // // } holder.itemView.currentWeatherContainer.animation = AnimationUtils.loadAnimation(context, R.anim.fade_scale) holder.CmaxTemp.text = (weathernew.main.temp_max.toDouble() - 273.1).toInt().toString() + "\u2103" holder.Chumidity.text = weathernew.main.humidity.toString() + "%" var iconcode=weathernew.weather[0].icon.toString() var iconurl = "https://openweathermap.org/img/w/" + iconcode + ".png"; Glide.with(holder.itemView.context) .load(iconurl) .into(holder.Cwelogo) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/DashboardEcomItemAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.firebase.firestore.DocumentSnapshot import com.project.farmingapp.R import com.project.farmingapp.utilities.CellClickListener import kotlinx.android.synthetic.main.single_dashboard_ecomm_item.view.* class DashboardEcomItemAdapter(var context: Context,val allData: List, val itemsToShow: List, val cellClickListener: CellClickListener): RecyclerView.Adapter() { class DashboardEcomItemViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){ } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DashboardEcomItemViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.single_dashboard_ecomm_item, parent, false) return DashboardEcomItemViewHolder(view) } override fun getItemCount(): Int { return itemsToShow.size } override fun onBindViewHolder(holder: DashboardEcomItemViewHolder, position: Int) { val currentData = allData[itemsToShow[position]] holder.itemView.itemTitle.text = currentData.get("title").toString() holder.itemView.itemPrice.text = "\u20B9" + currentData.get("price").toString() val allImages = currentData.get("imageUrl") as ArrayList Glide.with(context).load(allImages[0]).into(holder.itemView.itemImage) holder.itemView.setOnClickListener { cellClickListener.onCellClickListener(currentData.id) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/EcommerceAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.view.menu.MenuView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.R import com.project.farmingapp.utilities.CellClickListener import kotlinx.android.synthetic.main.post_with_image_sm.view.* import kotlinx.android.synthetic.main.single_ecomm_item.view.* class EcommerceAdapter(val context: Context, val ecommtListData : List, private val cellClickListener: CellClickListener):RecyclerView.Adapter() { lateinit var firebaseAuth: FirebaseAuth lateinit var firebaseFirestore: FirebaseFirestore class EcommercceViewModel(itemView: View):RecyclerView.ViewHolder(itemView) { } override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): EcommerceAdapter.EcommercceViewModel { val view = LayoutInflater.from(context).inflate(R.layout.single_ecomm_item, parent, false) return EcommerceAdapter.EcommercceViewModel(view) } override fun getItemCount(): Int { return ecommtListData.size } override fun onBindViewHolder(holder: EcommerceAdapter.EcommercceViewModel, position: Int) { val currentList = ecommtListData[position] holder.itemView.ecommtitle.text = currentList.get("title").toString() holder.itemView.ecommPrice.text = "\u20B9 "+currentList.get("price").toString() holder.itemView.ecommretailer.text = currentList.get("retailer").toString() holder.itemView.ecommItemAvailability.text = currentList.get("availability").toString() val allImages = currentList.get("imageUrl") as List Glide.with(context).load(allImages[0].toString()).into(holder.itemView.ecommImage) holder.itemView.ecommRating.rating = currentList.get("rating").toString().toFloat() holder.itemView.setOnClickListener { cellClickListener.onCellClickListener(currentList.id.toString()) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/IntroAdapter.kt ================================================ package com.project.farmingapp.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.project.farmingapp.R import com.project.farmingapp.model.data.IntroData class IntroAdapter(private val introSlides: List): RecyclerView.Adapter() { inner class IntroViewHolder(view: View) : RecyclerView.ViewHolder(view){ private val textTitle = view.findViewById(R.id.sliderTitle) private val textDescription = view.findViewById(R.id.sliderDescription) private val imageIcon = view.findViewById(R.id.imageSlider) fun bind(introSlider: IntroData){ textTitle.text = introSlider.title textDescription.text = introSlider.description imageIcon.setImageResource(introSlider.image) } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IntroViewHolder { return IntroViewHolder( LayoutInflater.from(parent.context).inflate(R.layout.single_slider_screen, parent, false) ) } override fun getItemCount(): Int { return introSlides.size } override fun onBindViewHolder(holder: IntroViewHolder, position: Int) { holder.bind(introSlides[position]) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/MyOrdersAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Intent import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.project.farmingapp.R import com.project.farmingapp.utilities.CartItemBuy import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.view.ecommerce.MyOrdersFragment import com.project.farmingapp.view.ecommerce.RazorPayActivity import com.project.farmingapp.viewmodel.EcommViewModel import kotlinx.android.synthetic.main.single_myorder_item.view.* import java.text.SimpleDateFormat import java.time.LocalDate import java.time.format.DateTimeFormatter import java.util.* import kotlin.collections.HashMap class MyOrdersAdapter( val context: MyOrdersFragment, val allData: HashMap, val cellClickListener: CellClickListener, val cartItemBuy: CartItemBuy ) : RecyclerView.Adapter() { class MyOrdersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyOrdersViewHolder { val view = LayoutInflater.from(context.context) .inflate(R.layout.single_myorder_item, parent, false) return MyOrdersViewHolder(view) } override fun getItemCount(): Int { return allData.size } override fun onBindViewHolder(holder: MyOrdersViewHolder, position: Int) { val myOrder = allData.entries.toTypedArray()[position].value as HashMap val viewModel = EcommViewModel() val currentItemAllData = viewModel.getSpecificItem("${myOrder.get("productId")}") .observe(context, androidx.lifecycle.Observer { Log.d("MyOrdersAdapter", it.toString()) holder.itemView.myOrderPinCode.text = myOrder.get("pincode").toString() holder.itemView.myOrderItemName.text = it!!.getString("title") holder.itemView.myOrderItemPrice.text = "\u20B9" + (myOrder.get("quantity").toString() .toInt() * myOrder.get("itemCost").toString() .toInt() + myOrder.get("deliveryCost").toString().toInt()).toString() holder.itemView.myOrderPinCode.text = "Pin Code: " + myOrder.get("pincode").toString() holder.itemView.myOderDeliveryCharge.text = myOrder.get("deliveryCost").toString() holder.itemView.myOrderDeliveryStatus.text = myOrder.get("deliveryStatus").toString() val allImages = it.get("imageUrl") as List Glide.with(context).load(allImages[0]).into(holder.itemView.myOderItemImage) val date = myOrder.get("time").toString().split(" ") as List holder.itemView.myOrderTimeStamp.text = date[0].toString() }) holder.itemView.myOrderPurchaseAgain.setOnClickListener { cartItemBuy.addToOrders(myOrder.get("productId").toString(), myOrder.get("quantity").toString().toInt(), myOrder.get("itemCost").toString().toInt(), myOrder.get("deliveryCost").toString().toInt()) } holder.itemView.setOnClickListener { cellClickListener.onCellClickListener("${myOrder.get("productId")}") } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/PaginationListener.kt ================================================ package com.project.farmingapp.adapter import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView public abstract class PaginationListener : RecyclerView.OnScrollListener() { companion object{ public val PAGE_START = 1 } private var layoutManager: LinearLayoutManager? = null /** * Set scrolling threshold here (for now i'm assuming 10 item in one page) */ private val PAGE_SIZE = 10 /** * Supporting only LinearLayoutManager for now. */ open fun PaginationListener(layoutManager: LinearLayoutManager) { this.layoutManager = layoutManager } override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) val visibleItemCount = layoutManager!!.childCount val totalItemCount = layoutManager!!.itemCount val firstVisibleItemPosition = layoutManager!!.findFirstVisibleItemPosition() if (!isLoading() && !isLastPage()) { if (visibleItemCount + firstVisibleItemPosition >= totalItemCount && firstVisibleItemPosition >= 0 && totalItemCount >= PAGE_SIZE ) { loadMoreItems() } } } protected abstract fun loadMoreItems() abstract fun isLastPage(): Boolean abstract fun isLoading(): Boolean } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/PostListUserProfileAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.text.Layout import android.text.format.DateUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.firebase.firestore.DocumentSnapshot import com.project.farmingapp.R import com.project.farmingapp.utilities.CellClickListener import kotlinx.android.synthetic.main.user_profile_posts_single.view.* class PostListUserProfileAdapter(val context: Context, var listData: ArrayList, private val cellClickListener: CellClickListener) : RecyclerView.Adapter() { class PostListUserProfileViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){ } override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): PostListUserProfileViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.user_profile_posts_single, parent, false) return PostListUserProfileAdapter.PostListUserProfileViewHolder(view) } override fun getItemCount(): Int { return listData.size } override fun onBindViewHolder(holder: PostListUserProfileViewHolder, position: Int) { val currentData = listData[position] holder.itemView.userPostTitleUserProfileFrag.text = currentData.get("title").toString() holder.itemView.userPostUploadTimeUserProfileFrag.text = DateUtils.getRelativeTimeSpanString(currentData.get("timeStamp") as Long) holder.itemView.userPostProfileCard.setOnClickListener { cellClickListener.onCellClickListener(currentData.id) } if (!currentData.get("imageUrl").toString().isNullOrEmpty()){ Glide.with(context).load(currentData.getString("imageUrl")).into(holder.itemView.userPostImageUserProfileFrag) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/SMPostListAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.text.format.DateUtils import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.R import kotlinx.android.synthetic.main.post_with_image_sm.view.* class SMPostListAdapter(val context: Context, val postListData : List): RecyclerView.Adapter() { lateinit var firebaseAuth: FirebaseAuth lateinit var firebaseFirestore: FirebaseFirestore class SMPostListViewModel(itemView: View): RecyclerView.ViewHolder(itemView){ } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SMPostListViewModel { val view = LayoutInflater.from(context).inflate(R.layout.post_with_image_sm, parent, false) return SMPostListAdapter.SMPostListViewModel(view) } override fun getItemCount(): Int { return postListData.size } override fun onBindViewHolder(holder: SMPostListViewModel, position: Int) { val currentPost = postListData[position] holder.itemView.userNamePostSM.text = currentPost.get("name").toString() holder.itemView.userPostTitleValue.text = currentPost.get("title").toString() holder.itemView.userPostDescValue.text = currentPost.get("description").toString() holder.itemView.userPostUploadTime.text = DateUtils.getRelativeTimeSpanString(currentPost.get("timeStamp") as Long) val imageUrl = currentPost.get("imageUrl") Log.d("Post without Image1", imageUrl.toString()) val uploadType = currentPost.get("uploadType").toString() if (uploadType == "video"){ // val mediaController: MediaController = MediaController(context.applicationContext) //// val uri: Uri = Uri.parse() // mediaController.setAnchorView(holder.itemView.postVideoSM) // // holder.itemView.postVideoSM.setZOrderMediaOverlay(true) // holder.itemView.postVideoSM.setMediaController(mediaController) // // Log.d("Upload Type 1 ", uploadType) // holder.itemView.postVideoSM.setVideoPath(currentPost.getString("imageUrl")) //// videoView1.requestFocus() // holder.itemView.postVideoSM.setOnPreparedListener { // // } // holder.itemView.postVideoSM.start() // // holder.itemView.postImageSM.visibility = View.GONE // holder.itemView.postVideoSM.visibility = View.VISIBLE // Web View val webSet: WebSettings = holder.itemView.postVideoSM.settings webSet.javaScriptEnabled = true webSet.loadWithOverviewMode = true webSet.useWideViewPort = true holder.itemView.postVideoSM.setWebViewClient(object : WebViewClient() { // autoplay when finished loading via javascript injection override fun onPageFinished(view: WebView, url: String) { // holder.itemView.postVideoSM.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()") } }) holder.itemView.postVideoSM.loadUrl(currentPost.get("imageUrl").toString()) // holder.itemView.postVideoSM.stopLoading() holder.itemView.postImageSM.visibility = View.GONE holder.itemView.postVideoSM.visibility = View.VISIBLE } else if (uploadType == "image"){ Glide.with(context).load(currentPost.get("imageUrl")).into(holder.itemView.postImageSM) holder.itemView.postVideoSM.visibility = View.GONE holder.itemView.postImageSM.visibility = View.VISIBLE Log.d("Upload Type 2 ", uploadType) }else if (uploadType.isEmpty() ){ Log.d("Post without Image2", imageUrl.toString()) holder.itemView.postImageSM.visibility = View.GONE holder.itemView.postVideoSM.visibility = View.GONE Log.d("Upload Type 3 ", uploadType) } firebaseAuth = FirebaseAuth.getInstance() holder.itemView.userProfileImageCard.animation = AnimationUtils.loadAnimation(context, R.anim.fade_transition) holder.itemView.post_container.animation = AnimationUtils.loadAnimation(context, R.anim.fade_transition) holder.itemView.post_container.animation = AnimationUtils.loadAnimation(context, R.anim.fade_transition) // Glide.with(context).load(firebaseAuth.currentUser!!.photoUrl.toString()).into(holder.itemView.userProfileImagePost) holder.itemView.userPostDescValue.setOnClickListener { holder.itemView.userPostDescValue.maxLines = Int.MAX_VALUE } firebaseFirestore = FirebaseFirestore.getInstance() firebaseFirestore.collection("users").document("${currentPost.get("userID")}").get() .addOnSuccessListener { val profileImage = it.get("profileImage").toString() if (!profileImage.isNullOrEmpty()){ Glide.with(context).load(it.get("profileImage").toString()).into(holder.itemView.userProfileImagePost) } } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/WeatherAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.project.farmingapp.R import com.project.farmingapp.model.data.WeatherList import java.text.SimpleDateFormat import java.time.LocalDateTime import java.util.* class WeatherAdapter(val context: Context, val weatherrootdatas: List) : RecyclerView.Adapter() { class WeatherViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var wedate = itemView.findViewById(R.id.weatherDate) var wedesc = itemView.findViewById(R.id.weatherDescription) var wemain = itemView.findViewById(R.id.weatherTemperature) var welogo = itemView.findViewById(R.id.weatherIcon) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WeatherViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.single_weather, parent, false) return WeatherViewHolder(view) } override fun getItemCount(): Int { return weatherrootdatas.size } override fun onBindViewHolder(holder: WeatherAdapter.WeatherViewHolder, position: Int) { val weathernew = weatherrootdatas[position] val inputFormat = SimpleDateFormat("yyyy-MM-dd") val outputFormat = SimpleDateFormat("dd/MM/yyyy") val date: Date = inputFormat.parse(weathernew.dt_txt.slice(0..9)) val outputDate = outputFormat.format(date) Log.d("New Date", outputDate.toString()) val we = weathernew.weather[0] val we2 = weathernew.main holder.wedate.text = outputDate holder.wedesc.text = we.description.capitalize() Log.d("weatherTemp", we2.temp.toString()) val Temp = we2.temp - 273.15 holder.wemain.text = Temp.toInt().toString() + "\u2103" var iconcode = weathernew.weather[0].icon.toString() var iconurl = "https://openweathermap.org/img/w/" + iconcode + ".png"; Log.d("weatherlogo", iconcode.toString()) Glide.with(holder.itemView.context) .load(iconurl) .into(holder.welogo) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/adapter/YojnaAdapter.kt ================================================ package com.project.farmingapp.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.cardview.widget.CardView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.firebase.firestore.DocumentSnapshot import com.project.farmingapp.R import com.project.farmingapp.utilities.CellClickListener class YojnaAdapter(val context: Context, val yojnaData: List, private val cellClickListener: CellClickListener): RecyclerView.Adapter() { class YojnaListviewHolder(itemview: View):RecyclerView.ViewHolder(itemview) { var yojnaName = itemView.findViewById(R.id.yojnaTitleYojnaList) var yojnaImage = itemView.findViewById(R.id.yojnaImageYojnaList) var yojnaDate = itemView.findViewById(R.id.yojnaDateYojnaList) var yojnaCard = itemView.findViewById(R.id.singlelistyojnacard) var yojnaStatus = itemView.findViewById(R.id.yojnaStatusYojnaList) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YojnaListviewHolder { val view = LayoutInflater.from(context).inflate(R.layout.single_yojna_list, parent, false) return YojnaAdapter.YojnaListviewHolder(view) } override fun getItemCount(): Int { return yojnaData.size } override fun onBindViewHolder(holder: YojnaListviewHolder, position: Int) { val singleYojna=yojnaData[position] holder.yojnaName.text = singleYojna.data!!.get("title").toString() holder.yojnaStatus.text = singleYojna.data!!.get("status").toString() holder.yojnaDate.text = singleYojna.data!!.get("launch").toString() val url = singleYojna.data!!.get("image").toString() Glide.with(holder.itemView.context) .load(url) .into(holder.yojnaImage) holder.yojnaCard.setOnClickListener { cellClickListener.onCellClickListener(singleYojna.data!!.get("title").toString()) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/APMCApi.kt ================================================ package com.project.farmingapp.model import com.project.farmingapp.model.data.APMCMain import com.project.farmingapp.model.data.WeatherRootList import retrofit2.Call import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.GET import retrofit2.http.Query //https://api.data.gov.in/resource/9ef84268-d588-465a-a308-a864a43d0070?api-key=579b464db66ec23bdd000001987c65666f9c49656f0f9ef4fa3650e7&format=json&offset=0&limit=400 const val BASE_URL2 ="https://api.data.gov.in/" const val API_KEY2 ="579b464db66ec23bdd000001987c65666f9c49656f0f9ef4fa3650e7" interface apmcInterface { @GET("resource/9ef84268-d588-465a-a308-a864a43d0070?api-key=$API_KEY2&format=json&offset=0&limit=7000") fun getapmc(@Query("limit")limit:Int): Call @GET("resource/9ef84268-d588-465a-a308-a864a43d0070?api-key=$API_KEY2&format=json&offset=0&limit=7000") fun getSomeData(@Query("filters[district]")filter:String):Call } object APMCApi { val apmcInstances:apmcInterface init { val retrofit = Retrofit.Builder() .baseUrl(BASE_URL2) .addConverterFactory(GsonConverterFactory.create()) .build() apmcInstances =retrofit.create(apmcInterface::class.java) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/APMCRepository.kt ================================================ package com.project.farmingapp.model class APMCRepository { } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/ArticleRepository.kt ================================================ package com.project.farmingapp.model import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.viewmodel.ArticleViewModel import com.project.farmingapp.viewmodel.WeatherViewModel class ArticleRepository { lateinit var firebaseDb: FirebaseFirestore var data = MutableLiveData>() val data2 = MutableLiveData() private lateinit var viewModel: ArticleViewModel fun getSpecificFruitArticle(name: String): LiveData { firebaseDb = FirebaseFirestore.getInstance() Log.d("ArticleRepo1", "Ss") firebaseDb.collection("article_fruits").document("${name}") .get() .addOnSuccessListener { // var ss = it.data viewModel = ArticleViewModel() // data.value = it.data as HashMap? viewModel.updateArticle(it.data as HashMap) // data.value = it.data as HashMap? data2.value = "Success" Log.d("ArticleRepo2", data2.value.toString()) } .addOnFailureListener { Log.d("ArticleRepo3", "ss") } return data2 } } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/AuthRepository.kt ================================================ package com.project.farmingapp.model import android.util.Log import android.widget.Toast import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.GoogleAuthProvider import com.google.firebase.firestore.FirebaseFirestore import java.io.Serializable class AuthRepository { lateinit var googleSignInClient: GoogleSignInClient val firebaseAuth = FirebaseAuth.getInstance() lateinit var firebaseDb: FirebaseFirestore val data = MutableLiveData() fun signInWithEmail( email: String, password: String, otherData: HashMap ): LiveData { firebaseDb = FirebaseFirestore.getInstance() val data2 = MutableLiveData() firebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener { if (it.isSuccessful) { firebaseDb!!.collection("users").document("${email}") .set(otherData) .addOnSuccessListener { data.value = "Success" } .addOnFailureListener { Exception -> { data.value = "Failure" } } } else if (it.isCanceled) { data.value = "Failure" } }.addOnFailureListener { Log.d("AuthRepo", it.message) data.value = it.message } return data } fun signInToGoogle( idToken: String, email: String, otherData: HashMap ): LiveData { firebaseDb = FirebaseFirestore.getInstance() val credential = GoogleAuthProvider.getCredential(idToken, null) firebaseAuth!!.signInWithCredential(credential) .addOnCompleteListener { if (it.isSuccessful) { val userDocRef = firebaseDb!!.collection("users").document("${email}") userDocRef.get().addOnSuccessListener { data.value = "Success" if(it.exists()){ Log.d("User", "User Exists") } else{ Log.d("User", "User Does not Exists") firebaseDb!!.collection("users").document("${email}") .set(otherData) .addOnSuccessListener { data.value = "Success" } .addOnFailureListener { Exception -> { data.value = "Failure" } } } } val user = firebaseAuth!!.currentUser } else { data.value = "Failure" } } return data } //login fun logInWithEmail( email: String, password: String ): LiveData { firebaseDb = FirebaseFirestore.getInstance() val data = MutableLiveData() firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener { if (it.isSuccessful) { data.value = "Success" } else if (it.isCanceled) { data.value = "Failure" } }.addOnFailureListener { Log.d("AuthRepo", it.message) data.value = it.message } return data } } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/WeatherApi.kt ================================================ package com.project.farmingapp.model import com.project.farmingapp.model.data.WeatherRootList import retrofit2.Call import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.GET import retrofit2.http.Query const val BASE_URL ="https://api.openweathermap.org/" const val API_KEY ="63259e8886cbe4d575c24358fb860b1b" interface weatherInterface { @GET("data/2.5/forecast?appid=$API_KEY") fun getWeather(@Query("lat")lat:String, @Query("lon")lon:String): Call } object WeatherApi { val weatherInstances:weatherInterface init { val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() weatherInstances =retrofit.create(weatherInterface::class.java) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/WeatherRepository.kt ================================================ package com.project.farmingapp.model import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.project.farmingapp.model.data.WeatherRootList import com.project.farmingapp.viewmodel.WeatherListener import retrofit2.Call import retrofit2.Callback import retrofit2.Response class WeatherRepository { val data = MutableLiveData() fun getWeather(): LiveData { val response: Call = WeatherApi.weatherInstances.getWeather("23.0225", "72.5714") val weathRes = MutableLiveData() response.enqueue(object : Callback { override fun onFailure(call: Call, t: Throwable) { Log.d("WeatherRepository", "Error Occured") } override fun onResponse( call: Call, response: Response ) { if (response.isSuccessful) { data.value = response.body() weathRes.value = "DONE" } else { weathRes.value = "FAILED" } } }) return weathRes } } ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/APMCCustomRecords.kt ================================================ package com.project.farmingapp.model.data data class APMCCustomRecords(val state:String,val district:String,val market:String,val commodity:MutableList,val min_price:MutableList,val max_price:MutableList) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/APMCMain.kt ================================================ package com.project.farmingapp.model.data data class APMCMain(val updated_date: String, val records: List) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/APMCRecords.kt ================================================ package com.project.farmingapp.model.data data class APMCRecords(val state:String,val district:String,val market:String,val commodity:String,val min_price:String,val max_price:String,val modal_price:String) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/CartItem.kt ================================================ package com.project.farmingapp.model.data import java.sql.Timestamp data class CartItem(var quantity: Int, val time: String) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/IntroData.kt ================================================ package com.project.farmingapp.model.data data class IntroData ( val title :String, val description: String, val image: Int ) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/Post.kt ================================================ package com.project.farmingapp.model.data data class Post(val timeStamp: Long, val imageID: String, val imageUrl:String) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/Weather.kt ================================================ package com.project.farmingapp.model.data data class Weather(val main:String ="" , val description:String ="" , val icon:String ="") ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/WeatherList.kt ================================================ package com.project.farmingapp.model.data data class WeatherList(val main:WeatherMain,val weather:List,val dt_txt:String, val wind: WeatherWind) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/WeatherMain.kt ================================================ package com.project.farmingapp.model.data data class WeatherMain(val temp:Float,val humidity:String,val temp_min:String,val temp_max:String) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/WeatherRootList.kt ================================================ package com.project.farmingapp.model.data //data class WeatherRootList(val list:List) : List data class WeatherRootList(val list: List) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/WeatherWind.kt ================================================ package com.project.farmingapp.model.data data class WeatherWind (val speed: Float) ================================================ FILE: app/src/main/java/com/project/farmingapp/model/data/orders.kt ================================================ package com.project.farmingapp.model.data import kotlinx.android.synthetic.main.activity_razor_pay.* import java.sql.Timestamp data class orders( var name: String, var locality: String, var city: String, var state: String, var pincode: String, var mobile: String, var time: String, var productId: String, var itemCost: Int, var quantity: Int, var deliveryCost: Int, var deliveryStatus: String ) ================================================ FILE: app/src/main/java/com/project/farmingapp/utilities/CartItemBuy.kt ================================================ package com.project.farmingapp.utilities interface CartItemBuy { fun addToOrders(productId: String, quantity: Int, itemCost: Int, deliveryCost: Int) } ================================================ FILE: app/src/main/java/com/project/farmingapp/utilities/CellClickListener.kt ================================================ package com.project.farmingapp.utilities interface CellClickListener { fun onCellClickListener(name: String) } ================================================ FILE: app/src/main/java/com/project/farmingapp/utilities/ViewUtils.kt ================================================ package com.project.farmingapp.utilities import android.content.Context import android.view.View import android.widget.ProgressBar import android.widget.Toast fun Context.toast(message: String){ Toast.makeText(this, message, Toast.LENGTH_LONG).show() } fun ProgressBar.show(){ visibility = View.VISIBLE } fun ProgressBar.hide(){ visibility = View.GONE } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/apmc/ApmcFragment.kt ================================================ package com.project.farmingapp.view.apmc import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.* import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import com.project.farmingapp.R import com.project.farmingapp.adapter.ApmcAdapter import com.project.farmingapp.model.APMCApi import com.project.farmingapp.model.data.APMCCustomRecords import com.project.farmingapp.model.data.APMCMain import kotlinx.android.synthetic.main.activity_login.* import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.fragment_apmc.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response import java.lang.reflect.Field import java.text.SimpleDateFormat import java.time.OffsetDateTime import java.util.* import kotlin.collections.ArrayList // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [ApmcFragment.newInstance] factory method to * create an instance of this fragment. */ class ApmcFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null lateinit var adapter: ApmcAdapter var indexSpinner1: Int? = null var indexSpinner2: Int? = null var someMap: Map>? = null var states: Array? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment // bottomNav.selectedItemId = R.id.bottomNavAPMC // getApmc() return inflater.inflate(R.layout.fragment_apmc, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) progress_apmc.visibility = View.GONE loadingTextAPMC.visibility = View.GONE setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "APMC" val sdf = SimpleDateFormat("dd/MM/yyyy") dateValueTextApmc.text = sdf.format(Date()).toString() states = arrayOf( "None", "Andhra Pradesh", "Chandigarh", "Chattisgarh", "Gujarat", "Hariyana", "Himachal Pradesh", "Jammu & Kashmir", "Jharkhand", "Karnataka", "Kerala", "Madhya Pradesh", "Maharashtra", "Odisha", "Pudu Cherry", "Punjab", "Rajasthan", "Tamil Nadu", "Telangana", "Uttar Pradesh", "Uttarakhand", "West Bengal" ) var districtInGujarat: Array = arrayOf( "None", "Ahmedabad", "Amreli", "Anand", "Aravalli", "Banaskantha", "Bharuch", "Bhavnagar", "Botad", "Chhota Udepur", "Dahod", "Dangs", "Devbhoomi Dwarka", "Gandhinagar", "Gir Somnath", "Jamnagar", "Junagadh", "Kachchh", "Kheda", "Mahisagar", "Mehsana", "Morbi", "Narmada", "Navsari", "Panchmahal", "Patan", "Porbandar", "Rajkot", "Sabarkantha", "Surat", "Surendranagar", "Tapi", "Vadodara", "Valsad" ) var districtInMaha: Array = arrayOf( "None", "Ahmednagar", "Akola", "Amravati", "Aurangabad", "Beed", "Bhandara", "Buldhana", "Chandrapur", "Dhule", "Gadchiroli", "Gondia", "Hingoli", "Jalgaon", "Jalna", "Kolhapur", "Latur", "Mumbai City", "Mumbai Suburban", "Nagpur", "Nanded", "Nandurbar", "Nashik", "Osmanabad", "Palghar", "Parbhani", "Pune", "Raigad", "Ratnagiri", "Sangli", "Satara", "Sindhudurg", "Solapur", "Thane", "Wardha", "Washim", "Yavatmal" ) var districtInRajasthan: Array = arrayOf( "None", "Ajmer", "Alwar", "Banswara", "Baran", "Barmer", "Bharatpur", "Bhilwara", "Bikaner", "Bundi", "Chittorgarh", "Churu", "Dausa", "Dholpur", "Dungarpur", "Hanumangarh", "Jaipur", "Jaisalmer", "Jalore", "Jhalawar", "Jhunjhunu", "Jodhpur", "Karauli", "Kota", "Nagaur", "Pali", "Pratapgarh", "Rajsamand", "Sawai Madhopur", "Sikar", "Sirohi", "Sri Ganganagar", "Tonk", "Udaipur" ) var districtInUttarPradesh: Array = arrayOf( "None", "Agra", "Aligarh", "Allahabad", "Ambedkar Nagar", "Amethi", "Amroha", "Auraiya", "Azamgarh", "Baghpat", "Bahraich", "Ballia", "Balrampur", "Banda", "Barabanki", "Bareilly", "Basti", "Bhadohi", "Bijnor", "Budaun", "Bulandshahr", "Chandauli", "Chitrakoot", "Deoria", "Etah", "Etawah", "Faizabad", "Farrukhabad", "Fatehpur", "Firozabad", "Gautam Buddha Nagar", "Ghaziabad", "Ghazipur", "Gonda", "Gorakhpur", "Hamirpur", "Hapur", "Hardoi", "Hathras", "Jalaun", "Jaunpur", "Jhansi", "Kannauj", "Kanpur Dehat", "Kanpur Nagar", "Kanshiram Nagar", "Kaushambi", "Kushinagar", "Lakhimpur - Kheri", "Lalitpur", "Lucknow", "Maharajganj", "Mahoba", "Mainpuri", "Mathura", "Mau", "Meerut", "Mirzapur", "Moradabad", "Muzaffarnagar", "Pilibhit", "Pratapgarh", "RaeBareli", "Rampur", "Saharanpur", "Sambhal", "Sant Kabir Nagar", "Shahjahanpur", "Shamali", "Shravasti", "Siddharth Nagar", "Sitapur", "Sonbhadra", "Sultanpur", "Unnao", "Varanasi" ) var districtInWestBengal: Array = arrayOf( "None", "Alipurduar", "Bankura", "Birbhum", "Cooch Behar", "Dakshin Dinajpur", "Darjeeling", "Hooghly", "Howrah", "Jalpaiguri", "Jhargram", "Kalimpong", "Kolkata", "Malda", "Murshidabad", "Nadia", "North 24 Parganas", "Paschim Medinipur", "Paschim Burdwan", "Purba Burdwan", "Purba Medinipur", "Purulia", "South 24 Parganas", "Uttar Dinajpur" ) var districtInKerala: Array = arrayOf( "None", "Alappuzha", "Ernakulam", "Idukki", "Kannur", "Kasaragod", "Kollam", "Kottayam", "Kozhikode", "Malappuram", "Palakkad", "Pathanamthitta", "Thiruvananthapuram", "Thrissur", "Wayanad" ) var districtInAndhraPradesh: Array = arrayOf( "None", "Anantapur", "Chittoor", "East Godavari", "Guntur", "Krishna", "Kurnool", "Prakasam", "Srikakulam", "Sri Potti Sriramulu Nellore", "Visakhapatnam", "Vizianagaram", "West Godavari", "Kadapa" ) var emptyDistricts : Array = arrayOf("None") var aa = ArrayAdapter( activity!!.applicationContext, android.R.layout.simple_spinner_dropdown_item, states!! ) spinner1.adapter = aa someMap = mapOf( "Andhra Pradesh" to districtInAndhraPradesh, "Gujarat" to districtInGujarat, "Kerala" to districtInKerala, "Maharashtra" to districtInMaha, "Rajasthan" to districtInRajasthan, "Uttar Pradesh" to districtInUttarPradesh, "West Bengal" to districtInWestBengal, "Chandigarh" to emptyDistricts, "Chattisgarh" to emptyDistricts, "Hariyana" to emptyDistricts, "Himachal Pradesh" to emptyDistricts, "Jammu & Kashmir" to emptyDistricts, "Jharkhand" to emptyDistricts, "Karnataka" to emptyDistricts, "Madhya Pradesh" to emptyDistricts, "Odisha" to emptyDistricts, "Pudu Cherry" to emptyDistricts, "Punjab" to emptyDistricts, "Tamil Nadu" to emptyDistricts, "Telangana" to emptyDistricts, "Uttarakhand" to emptyDistricts ) spinner1.onItemSelectedListener = object : AdapterView.OnItemClickListener, AdapterView.OnItemSelectedListener { override fun onNothingSelected(p0: AdapterView<*>?) { TODO("Not yet implemented") } override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { if (p2 == 0) { textAPMCWarning.text = "Please Select State and District" recycleAPMC.visibility = View.GONE textAPMCWarning.visibility = View.VISIBLE } else { var aa2 = ArrayAdapter( activity!!.applicationContext, android.R.layout.simple_spinner_dropdown_item, someMap!![states!![p2]]!! ) indexSpinner1 = p2 spinner2.adapter = aa2 aa2.notifyDataSetChanged() } } override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { } } spinner2.onItemSelectedListener = object : AdapterView.OnItemClickListener, AdapterView.OnItemSelectedListener { override fun onNothingSelected(p0: AdapterView<*>?) { TODO("Not yet implemented") } override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { if (p2 == 0) { textAPMCWarning.text = "Please Select District" recycleAPMC.visibility = View.GONE textAPMCWarning.visibility = View.VISIBLE } else { textAPMCWarning.visibility = View.GONE if (p2 != 0) { getApmc("${someMap!![states!![indexSpinner1!!]]!![p2]}") } indexSpinner2 = p2 progress_apmc.visibility = View.VISIBLE loadingTextAPMC.visibility = View.VISIBLE } } override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { } } } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment ApmcFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = ApmcFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } private fun getApmc(district: String) { val apmc1: Call = APMCApi.apmcInstances.getapmc(20) var apmc2: Call? = null if (indexSpinner2 != 0) { apmc2 = APMCApi.apmcInstances.getSomeData(district) Log.d("APMC District", district) apmc2!!.enqueue(object : Callback { override fun onFailure(call: Call, t: Throwable) { Log.d("bharat222", "fail ho gya", t) progress_apmc.visibility = View.GONE loadingTextAPMC.visibility = View.GONE } override fun onResponse( call: Call, response: Response ) { val apmcdata = response.body() if (apmcdata != null) { val updatedYear = apmcdata.updated_date.toString().slice(0..3) val updatedMonth = apmcdata.updated_date.toString().slice(5..6) val updatedDate = apmcdata.updated_date.toString().slice(8..9) dateValueTextApmc.text = "$updatedDate/$updatedMonth/$updatedYear" if (apmcdata.records.size == 0) { progress_apmc.visibility = View.GONE loadingTextAPMC.visibility = View.GONE textAPMCWarning.visibility = View.VISIBLE recycleAPMC.visibility = View.GONE textAPMCWarning.text = "No records found!" } else { textAPMCWarning.visibility = View.GONE recycleAPMC.visibility = View.VISIBLE Log.d("APMCFrag", apmcdata.records.toString()) val totalRecords = apmcdata.records.size var firstMarket = "" if (!apmcdata.records[0].market.isNullOrEmpty()) { firstMarket = apmcdata.records[0].market.toString() } val customRecords = ArrayList() val list1 = mutableListOf() val list2 = mutableListOf() val list3 = mutableListOf() list1.add(apmcdata.records[0].commodity) list2.add(apmcdata.records[0].min_price) list3.add(apmcdata.records[0].max_price) var previousRecord = APMCCustomRecords( apmcdata.records[0].state, apmcdata.records[0].district, apmcdata.records[0].market, list1, list2, list3 ) val ss = apmcdata.records[0].market Log.d("PreREc", previousRecord.toString()) if (totalRecords == 1) { customRecords.add(previousRecord) } else { var count = 0 for (i in 1..totalRecords - 1) { if (apmcdata.records[i].market == previousRecord.market) { previousRecord.commodity.add(apmcdata.records[i].commodity) previousRecord.min_price.add(apmcdata.records[i].min_price) previousRecord.max_price.add(apmcdata.records[i].max_price) count = 1 } else { count = 0 customRecords.add(previousRecord) list1.add(apmcdata.records[i].commodity) list2.add(apmcdata.records[i].min_price) list3.add(apmcdata.records[i].max_price) previousRecord = APMCCustomRecords( apmcdata.records[i].state, apmcdata.records[i].district, apmcdata.records[i].market, list1, list2, list3 ) } } if (count == 1) { Log.d("LastRec", "Yes") customRecords.add(previousRecord) } } Log.d("New APMC Data", customRecords.toString()) Log.d("Old APMC Data", apmcdata.toString()) adapter = ApmcAdapter(activity!!.applicationContext, customRecords) recycleAPMC.adapter = adapter recycleAPMC.layoutManager = LinearLayoutManager(activity!!.applicationContext) progress_apmc.visibility = View.GONE loadingTextAPMC.visibility = View.GONE Log.d("bharat222", apmcdata.toString()) } } } }) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/articles/ArticleListFragment.kt ================================================ package com.project.farmingapp.view.articles import android.R.attr.fragment import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.GridLayoutManager import com.project.farmingapp.R import com.project.farmingapp.adapter.ArticleListAdapter import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.viewmodel.ArticleViewModel import kotlinx.android.synthetic.main.fragment_article_list.* // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [ArticleListFragment.newInstance] factory method to * create an instance of this fragment. */ class ArticleListFragment : Fragment(), CellClickListener { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null private lateinit var viewModel: ArticleViewModel lateinit var Adapter: ArticleListAdapter lateinit var fruitFragment: FruitsFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } viewModel = ViewModelProviders.of(requireActivity()) .get(ArticleViewModel::class.java) viewModel.getAllArticles("article_fruits") } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { viewModel.message3.observe(viewLifecycleOwner, Observer { Log.d("Art All Data", it[0].data.toString()) Adapter = ArticleListAdapter(activity!!.applicationContext, it, this) recyclerArticleListFrag.adapter = Adapter recyclerArticleListFrag.layoutManager = GridLayoutManager(activity!!.applicationContext, 2) }) // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_article_list, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment ArticleListFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = ArticleListFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Articles" } override fun onCellClickListener(name: String) { fruitFragment = FruitsFragment() val bundle = Bundle() bundle.putString("name", name) fruitFragment.setArguments(bundle) val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, fruitFragment, name) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("name") .commit() } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/articles/FruitsFragment.kt ================================================ package com.project.farmingapp.view.articles import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.RotateAnimation import android.widget.ProgressBar import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.bumptech.glide.Glide import com.project.farmingapp.R import com.project.farmingapp.utilities.hide import com.project.farmingapp.utilities.show import com.project.farmingapp.viewmodel.ArticleListener import com.project.farmingapp.viewmodel.ArticleViewModel import kotlinx.android.synthetic.main.fragment_fruits.* // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [FruitsFragment.newInstance] factory method to * create an instance of this fragment. */ class FruitsFragment : Fragment(), ArticleListener { // TODO: Rename and change types of parameters private var param1: String? = null private lateinit var viewModel: ArticleViewModel private var param2: String? = null private var param3: String? = null val desc = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) param3 = it.getString("name") } viewModel = ViewModelProviders.of(requireActivity()) .get(ArticleViewModel::class.java) // viewModel.getAllArticles(tag!!) val tag = this.tag.toString() Log.d("I'm called 2", viewModel.message3.value.toString()) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { viewModel.message1.observe(viewLifecycleOwner, Observer { progressArticle.show() val attributes: Map = it.get("attributes") as Map val desc = it.get("description").toString() Log.d("I'm Called", "Yes") val diseases: List = it.get("diseases") as List Log.d("Diseases2", it.get("diseases").toString()) tempTextFruitFragArt.text = attributes.get("Temperature").toString() monthTextFruitFragArt.text = attributes.get("Time").toString() titleTextFruitFragArt.text = it.get("title").toString() descTextValueFruitFragArt.text = desc processTextValueFruitFragArt.text = it.get("process").toString() soilTextValueFruitFragArt.text = it.get("soil").toString() stateTextValueFruitFragArt.text = it.get("state").toString() val images: List = it.get("images") as List Glide.with(this) .load(images[0]) .into(imageFruitFragArt) attr1ValueFruitFragArt.text = attributes.get("Weight").toString() attr2ValueFruitFragArt.text = attributes.get("Vitamins").toString() attr3ValueFruitFragArt.text = attributes.get("Tree Height").toString() attr4ValueFruitFragArt.text = attributes.get("growthTime").toString() diseaseTextValueFruitFragArt.text = "" for (i in 0..diseases.size - 1) { diseaseTextValueFruitFragArt.text = diseaseTextValueFruitFragArt.text.toString() + (i + 1).toString() + ". " + diseases[i].toString() + "\n" } progressArticle.hide() }) // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_fruits, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment FruitsFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = FruitsFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Articles" val params = descTextTitleFruitFragArt.layoutParams var toggle = 0 descToggleBtnFruitFragArt.setOnClickListener { if (toggle == 0) { descTextValueFruitFragArt.maxLines = Integer.MAX_VALUE toggle = 1 val rotateAnim = RotateAnimation( 0.0f, 180f, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f ) rotateAnim.duration = 2 rotateAnim.fillAfter = true descToggleBtnFruitFragArt.startAnimation(rotateAnim) } else if (toggle == 1) { descTextValueFruitFragArt.maxLines = 3 toggle = 0 val rotateAnim = RotateAnimation( 180f, 0f, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f ) rotateAnim.duration = 2 rotateAnim.fillAfter = true descToggleBtnFruitFragArt.startAnimation(rotateAnim) } } // New val newData = viewModel.message3.value Log.d("New data length", newData!!.size.toString()) val newDataLength = newData!!.size for (a in 0 until newDataLength) { if (newData[a].data!!.get("title") == this.tag) { var data = newData[a].data val attributes: Map = data!!.get("attributes") as Map val desc = data!!.get("description").toString() val diseases: List = data!!.get("diseases") as List Log.d("I'm Called3", attributes.get("Temperature").toString()) Log.d("I'm Called", "Yes") Log.d("Diseases2", data!!.get("diseases").toString()) tempTextFruitFragArt.text = attributes.get("Temperature").toString() monthTextFruitFragArt.text = attributes.get("Time").toString() titleTextFruitFragArt.text = data!!.get("title").toString() descTextValueFruitFragArt.text = desc processTextValueFruitFragArt.text = data!!.get("process").toString() soilTextValueFruitFragArt.text = data!!.get("soil").toString() stateTextValueFruitFragArt.text = data!!.get("state").toString() val images: List = data!!.get("images") as List Glide.with(this) .load(images[0]) .into(imageFruitFragArt) attr1ValueFruitFragArt.text = attributes.get("Weight").toString() attr2ValueFruitFragArt.text = attributes.get("Vitamins").toString() attr3ValueFruitFragArt.text = attributes.get("Tree Height").toString() attr4ValueFruitFragArt.text = attributes.get("growthTime").toString() diseaseTextValueFruitFragArt.text = "" for (i in 0..diseases.size - 1) { diseaseTextValueFruitFragArt.text = diseaseTextValueFruitFragArt.text.toString() + (i + 1).toString() + ". " + diseases[i].toString() + "\n" } progressArticle.hide() } } } override fun onStarted() { TODO("Not yet implemented") } override fun onSuccess(authRepo: LiveData) { authRepo.observe(viewLifecycleOwner, Observer { Log.d("Fruit", "Success") }) } override fun onFailure(message: String) { TODO("Not yet implemented") } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/articles/MachineFragment.kt ================================================ package com.project.farmingapp.view.articles import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.project.farmingapp.R // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [MachineFragment.newInstance] factory method to * create an instance of this fragment. */ class MachineFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_machine, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment MachineFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = MachineFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/auth/LoginActivity.kt ================================================ package com.project.farmingapp.view.auth import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.google.firebase.auth.FirebaseAuth import com.project.farmingapp.R import com.project.farmingapp.databinding.ActivityLoginBinding import com.project.farmingapp.utilities.hide import com.project.farmingapp.utilities.show import com.project.farmingapp.utilities.toast import com.project.farmingapp.view.dashboard.DashboardActivity import com.project.farmingapp.viewmodel.AuthListener import com.project.farmingapp.viewmodel.AuthViewModel import kotlinx.android.synthetic.main.activity_login.* class LoginActivity : AppCompatActivity(), AuthListener { lateinit var googleSignInClient: GoogleSignInClient val firebaseAuth = FirebaseAuth.getInstance() lateinit var viewModel: AuthViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding: ActivityLoginBinding = DataBindingUtil.setContentView(this, R.layout.activity_login) viewModel = ViewModelProviders.of(this).get(AuthViewModel::class.java) binding.authViewModel = viewModel viewModel.authListener = this if (firebaseAuth.currentUser != null) { Intent(this, DashboardActivity::class.java).also { startActivity(it) } } createaccountText.setOnClickListener { Intent(this, SignupActivity::class.java).also { startActivity(it) } } signGoogleBtnLogin.setOnClickListener { signIn() } forgotPasswdTextLogin.setOnClickListener { val userEmail = emailEditLogin.text.toString() if (userEmail.isNullOrEmpty()) { Toast.makeText(this, "Please enter your Email", Toast.LENGTH_SHORT).show() } else { // Toast.makeText(this, "Please enter your Email", Toast.LENGTH_SHORT).show() firebaseAuth.sendPasswordResetEmail(userEmail) .addOnCompleteListener { if (it.isSuccessful) { Toast.makeText(this, "Email Sent", Toast.LENGTH_LONG).show() } } .addOnFailureListener { Toast.makeText(this, it.message, Toast.LENGTH_SHORT).show() } } } } //googlesignIn override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) viewModel.returnActivityResult(requestCode, resultCode, data) } fun signIn() { val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() googleSignInClient = GoogleSignIn.getClient(this, gso) val signInIntent = googleSignInClient.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) } override fun onBackPressed() { super.onBackPressed() val a = Intent(Intent.ACTION_MAIN) a.addCategory(Intent.CATEGORY_HOME) a.flags = Intent.FLAG_ACTIVITY_NEW_TASK startActivity(a) } companion object { private const val TAG = "GoogleActivity" private const val RC_SIGN_IN = 9001 } override fun onStarted() { progressLogin.show() } override fun onSuccess(authRepo: LiveData) { authRepo.observe(this, Observer { progressLogin.hide() if (it.toString() == "Success") { toast("Logged In") Toast.makeText(this, it.toString(), Toast.LENGTH_LONG).show() Intent(this, DashboardActivity::class.java).also { startActivity(it) } } }) } override fun onFailure(message: String) { progressLogin.hide() toast("Failure") } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/auth/SignupActivity.kt ================================================ package com.project.farmingapp.view.auth import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.databinding.DataBindingUtil import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.google.android.gms.common.api.ApiException import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.GoogleAuthProvider import com.project.farmingapp.R import com.project.farmingapp.databinding.ActivitySignupBinding import com.project.farmingapp.utilities.hide import com.project.farmingapp.utilities.show import com.project.farmingapp.utilities.toast import com.project.farmingapp.view.dashboard.DashboardActivity import com.project.farmingapp.viewmodel.AuthListener import com.project.farmingapp.viewmodel.AuthViewModel import kotlinx.android.synthetic.main.activity_signup.* class SignupActivity : AppCompatActivity(), AuthListener { lateinit var googleSignInClient: GoogleSignInClient val firebaseAuth = FirebaseAuth.getInstance() lateinit var viewModel: AuthViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding: ActivitySignupBinding = DataBindingUtil.setContentView(this, R.layout.activity_signup) viewModel = ViewModelProviders.of(this).get(AuthViewModel::class.java) binding.authViewModel = viewModel viewModel.authListener = this loginRedirectTextSignup.setOnClickListener { Intent(this, LoginActivity::class.java).also { startActivity(it) } } signGoogleBtnSignup.setOnClickListener { signIn() } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) viewModel.returnActivityResult(requestCode, resultCode, data) } fun signIn() { val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() googleSignInClient = GoogleSignIn.getClient(this, gso) val signInIntent = googleSignInClient.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) } companion object { private const val TAG = "GoogleActivity" private const val RC_SIGN_IN = 9001 } override fun onStarted() { progressSignup.show() } override fun onSuccess(authRepo: LiveData) { authRepo.observe(this, Observer { progressSignup.hide() if (it.toString() == "Success") { toast("Account Created") Intent(this, DashboardActivity::class.java).also { startActivity(it) } } }) } override fun onFailure(message: String) { progressSignup.hide() toast("Failure") } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/dashboard/DashboardActivity.kt ================================================ package com.project.farmingapp.view.dashboard import android.Manifest import android.annotation.SuppressLint import android.content.Context import android.content.DialogInterface import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager import android.location.Address import android.location.Geocoder import android.location.Location import android.location.LocationManager import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.Handler import android.os.PersistableBundle import android.provider.Settings import android.service.autofill.UserData import android.util.AttributeSet import android.util.Log import android.view.Gravity import android.view.MenuItem import android.view.View import android.widget.TextView import android.widget.Toast import android.widget.Toolbar import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDelegate import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.view.GravityCompat import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProviders import androidx.navigation.NavController import androidx.recyclerview.widget.LinearLayoutManager import com.bumptech.glide.Glide import com.bumptech.glide.Glide.with import com.google.android.gms.common.api.GoogleApiClient import com.google.android.gms.location.LocationRequest import com.google.android.gms.location.LocationServices import com.google.android.material.navigation.NavigationView import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.R import com.project.farmingapp.adapter.CurrentWeatherAdapter import com.project.farmingapp.adapter.WeatherAdapter import com.project.farmingapp.databinding.ActivityDashboardBinding import com.project.farmingapp.model.WeatherApi import com.project.farmingapp.model.data.Weather import com.project.farmingapp.model.data.WeatherList import com.project.farmingapp.model.data.WeatherRootList import com.project.farmingapp.view.apmc.ApmcFragment import com.project.farmingapp.view.articles.ArticleListFragment import com.project.farmingapp.view.articles.FruitsFragment import com.project.farmingapp.view.auth.LoginActivity import com.project.farmingapp.view.ecommerce.* import com.project.farmingapp.view.introscreen.IntroActivity import com.project.farmingapp.view.socialmedia.SMCreatePostFragment import com.project.farmingapp.view.socialmedia.SocialMediaPostsFragment import com.project.farmingapp.view.user.UserFragment import com.project.farmingapp.view.weather.WeatherFragment import com.project.farmingapp.viewmodel.UserDataViewModel import com.project.farmingapp.viewmodel.UserProfilePostsViewModel import com.project.farmingapp.viewmodel.WeatherViewModel import com.squareup.picasso.Picasso import com.squareup.picasso.PicassoProvider import kotlinx.android.synthetic.main.activity_dashboard.* import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.fragment_weather.* import kotlinx.android.synthetic.main.nav_header.* import kotlinx.android.synthetic.main.nav_header.view.* import org.w3c.dom.Document import retrofit2.Call import retrofit2.Callback import retrofit2.Response import retrofit2.Retrofit import java.util.* import kotlin.collections.ArrayList class DashboardActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, View.OnClickListener, com.google.android.gms.location.LocationListener { lateinit var cartFragment: CartFragment lateinit var ecommerceItemFragment: EcommerceItemFragment lateinit var paymentFragment: PaymentFragment lateinit var dashboardFragment: dashboardFragment lateinit var ecommerceFragment: EcommerceFragment lateinit var weatherFragment: WeatherFragment lateinit var navController: NavController lateinit var toggle: ActionBarDrawerToggle lateinit var blankFragment1: WeatherFragment lateinit var apmcFragment: ApmcFragment lateinit var articleListFragment: ArticleListFragment lateinit var myOrdersFragment: MyOrdersFragment lateinit var userFragment: UserFragment lateinit var socialMediaPostFragment: SocialMediaPostsFragment lateinit var smCreatePostFragment: SMCreatePostFragment private lateinit var viewModel: UserDataViewModel private lateinit var viewModel2: UserProfilePostsViewModel private lateinit var weatherViewModel: WeatherViewModel lateinit var sharedPreferences: SharedPreferences val firebaseFireStore = FirebaseFirestore.getInstance() val firebaseAuth = FirebaseAuth.getInstance() var userName = "" var data: WeatherRootList? = null var firstTime: Boolean? = null private var REQUEST_LOCATION_CODE = 101 private var mGoogleApiClient: GoogleApiClient? = null private var mLocation: Location? = null private var mLocationRequest: LocationRequest? = null private val UPDATE_INTERVAL = (2 * 1000).toLong() /* 10 secs */ private val FASTEST_INTERVAL: Long = 2000 /* 2 sec */ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_dashboard) val binding: ActivityDashboardBinding = DataBindingUtil.setContentView(this, R.layout.activity_dashboard) viewModel = ViewModelProviders.of(this).get(UserDataViewModel::class.java) binding.userDataViewModel = viewModel toggle = ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close) drawerLayout.addDrawerListener(toggle) toggle.syncState() weatherViewModel = ViewModelProviders.of(this) .get(WeatherViewModel::class.java) viewModel2 = ViewModelProviders.of(this) .get(UserProfilePostsViewModel::class.java) // viewModel2.getAllPosts(firebaseAuth.currentUser!!.email.toString()) mGoogleApiClient = GoogleApiClient.Builder(this) .addApi(LocationServices.API) .build() mGoogleApiClient!!.connect() buildGoogleApiClient() val currentUser = firebaseAuth.currentUser sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE) firstTime =sharedPreferences.getBoolean("firstTime", true); if(firstTime!!){ Intent(this, IntroActivity::class.java).also { startActivity(it) } // val editor = sharedPreferences.edit() // firstTime = false; // editor.putBoolean("firstTime", firstTime!!) // editor.apply() finish() return } else{ if(currentUser == null){ Intent(this, LoginActivity::class.java).also { startActivity(it) } finish() return } else{ } } viewModel.getUserData(firebaseAuth.currentUser!!.email as String) navView.setNavigationItemSelectedListener(this) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.title = "Farming App" ecommerceItemFragment=EcommerceItemFragment() dashboardFragment = dashboardFragment() weatherFragment = WeatherFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, dashboardFragment, "dashFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .commit() bottomNav.selectedItemId = R.id.bottomNavHome val something = navView.getHeaderView(0); if (dashboardFragment.isVisible) { bottomNav.selectedItemId = R.id.bottomNavHome } something.setOnClickListener { Toast.makeText(this, "You Clicked Slider", Toast.LENGTH_LONG).show() if (drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START) } else { super.onBackPressed() } userFragment = UserFragment() supportFragmentManager.beginTransaction().apply { replace(R.id.frame_layout, userFragment, "userFrag") setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) setReorderingAllowed(true) addToBackStack("userFrag") commit() } } apmcFragment = ApmcFragment() socialMediaPostFragment = SocialMediaPostsFragment() ecommerceFragment=EcommerceFragment() paymentFragment = PaymentFragment() cartFragment= CartFragment() myOrdersFragment=MyOrdersFragment() bottomNav.setOnNavigationItemSelectedListener { when (it.itemId) { R.id.bottomNavAPMC -> { supportFragmentManager.beginTransaction().apply { replace(R.id.frame_layout, apmcFragment, "apmcFrag") setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) setReorderingAllowed(true) addToBackStack("apmcFrag") commit() } } R.id.bottomNavHome -> { supportFragmentManager.beginTransaction().apply { replace(R.id.frame_layout, dashboardFragment, "dashFrag") setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) setReorderingAllowed(true) addToBackStack("dashFrag") commit() } } R.id.bottomNavEcomm -> { ecommerceFragment = EcommerceFragment() supportFragmentManager.beginTransaction().apply { replace(R.id.frame_layout, ecommerceFragment, "ecommItemFrag") setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) setReorderingAllowed(true) addToBackStack("ecommItemFrag") commit() } } R.id.bottomNavPost -> { socialMediaPostFragment = SocialMediaPostsFragment() supportFragmentManager.beginTransaction().apply { replace(R.id.frame_layout, socialMediaPostFragment, "socialFrag") setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) setReorderingAllowed(true) addToBackStack("socialFrag") commit() } } } true } viewModel.userliveData.observe(this, Observer { val something = navView.getHeaderView(0); val posts = it.get("posts") as List val city = it.get("city") userName = it.get("name").toString() // val allPosts = viewModel2.liveData3.value as ArrayList if(city == null){ something.cityTextNavHeader.text ="City: " } else{ something.cityTextNavHeader.text ="City: " + it.get("city").toString() } something.navbarUserName.text = userName something.navbarUserEmail.text = firebaseAuth.currentUser!!.email Glide.with(this).load(it.get("profileImage")).into(something.navbarUserImage) Log.d("User Data from VM", it.getString("name")) something.navBarUserPostCount.text = "Posts Count: " + posts.size.toString() }) } override fun onOptionsItemSelected(item: MenuItem): Boolean { if (toggle.onOptionsItemSelected(item)) { return true } return super.onOptionsItemSelected(item) } private fun setCurrentFragment(fragment: Fragment) { supportFragmentManager.beginTransaction().apply { replace(R.id.frame_layout, fragment) setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) setReorderingAllowed(true) addToBackStack("name") commit() } } override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { super.onPostCreate(savedInstanceState, persistentState) toggle.syncState() } override fun onNavigationItemSelected(item: MenuItem): Boolean { bottomNav.selectedItemId = R.id.bottomNavHome when (item.itemId) { R.id.miItem1 -> { ecommerceFragment = EcommerceFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, ecommerceFragment, "ecommListFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("ecommListFrag") .commit() } R.id.miItem2 -> { apmcFragment = ApmcFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, apmcFragment, "apmcFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("apmcFrag") .commit() } R.id.miItem3 ->{ smCreatePostFragment = SMCreatePostFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, smCreatePostFragment, "createPostFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("createPostFrag") .commit() } R.id.miItem4 -> { socialMediaPostFragment = SocialMediaPostsFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, socialMediaPostFragment, "socialFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("socialFrag") .commit() } R.id.miItem5 -> { weatherFragment = WeatherFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, weatherFragment, "weatherFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("weatherFrag") .commit() } R.id.miItem6 -> { articleListFragment = ArticleListFragment() supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, articleListFragment, "articleListFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("articleListFrag") .commit() } R.id.miItem7 -> { supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, myOrdersFragment, "myOrdersFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("myOrdersFrag") .commit() } R.id.miItem8 -> { val builder = AlertDialog.Builder(this) builder.setTitle("Log Out") .setMessage("Do you want to logout?") .setPositiveButton("Yes") { dialogInterface, i -> firebaseAuth.signOut() Toast.makeText(this, "Logged Out", Toast.LENGTH_LONG).show() Intent(this, LoginActivity::class.java).also { startActivity(it) } } .setNegativeButton("No") { dialogInterface, i -> } .show() } } drawerLayout.closeDrawer(GravityCompat.START) return true } override fun onBackPressed() { super.onBackPressed() if (dashboardFragment.isVisible) { if (drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START) } else { } } } fun automatedClick(){ if (!checkGPSEnabled()) { return } if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { //Location Permission already granted getLocation(); } else { //Request Location Permission checkLocationPermission() } } else { getLocation(); // buildGoogleApiClient() } } override fun onClick(v: View?) { if (!checkGPSEnabled()) { return } if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { //Location Permission already granted getLocation(); } else { //Request Location Permission checkLocationPermission() } } else { getLocation(); } } @SuppressLint("MissingPermission") private fun getLocation() { mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if (mLocation == null) { startLocationUpdates(); } if (mLocation != null) { Toast.makeText(this, "Lat: " + mLocation!!.latitude.toString(), Toast.LENGTH_SHORT).show() Toast.makeText(this, "Long: " + mLocation!!.longitude.toString(), Toast.LENGTH_SHORT).show() val coords = mutableListOf() val geocoder = Geocoder(this, Locale.getDefault()) val addresses: List
= geocoder.getFromLocation(mLocation!!.latitude, mLocation!!.longitude, 1) coords.add(mLocation!!.latitude.toString()) coords.add(mLocation!!.longitude.toString()) coords.add(addresses[0].locality.toString()) weatherViewModel.updateCoordinates(coords) } else { Toast.makeText(this, "Location not Detected", Toast.LENGTH_SHORT).show(); } } private fun startLocationUpdates() { // Create the location request mLocationRequest = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setInterval(UPDATE_INTERVAL) .setFastestInterval(FASTEST_INTERVAL) // Request location updates if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this) } override fun onLocationChanged(p0: Location?) { // automatedClick() } @Synchronized private fun buildGoogleApiClient() { mGoogleApiClient = GoogleApiClient.Builder(this) .addApi(LocationServices.API) .build() mGoogleApiClient!!.connect() // automatedClick() } private fun checkGPSEnabled(): Boolean { if (!isLocationEnabled()) showAlert() return isLocationEnabled() } private fun showAlert() { val dialog = android.app.AlertDialog.Builder(this) dialog.setTitle("Enable Location") .setMessage("Your Locations Settings is set to 'Off'.\nPlease Enable Location to use this app!") .setPositiveButton("Location Settings") { paramDialogInterface, paramInt -> val myIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) startActivity(myIntent) } .setNegativeButton("Cancel") { paramDialogInterface, paramInt -> } dialog.show() } private fun isLocationEnabled(): Boolean { var locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager return locationManager!!.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager!!.isProviderEnabled( LocationManager.NETWORK_PROVIDER) } private fun checkLocationPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) { android.app.AlertDialog.Builder(this) .setTitle("Location Permission Needed") .setMessage("This app needs the Location Permissions!\nPlease accept to use location functionality.") .setPositiveButton("OK", DialogInterface.OnClickListener { dialog, which -> ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_CODE) }) .create() .show() } else ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_CODE) } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { when (requestCode) { REQUEST_LOCATION_CODE -> { // If request is cancelled, the result arrays are empty. if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the location-related task you need to do. if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "Permission Granted", Toast.LENGTH_LONG).show() automatedClick() } } else { // permission denied, boo! Disable the functionality that depends on this permission. Toast.makeText(this, "Permission Denied", Toast.LENGTH_LONG).show() } return } } } override fun onStart() { super.onStart() mGoogleApiClient?.connect() Handler().postDelayed({ automatedClick() }, 1000) } override fun onStop() { super.onStop() if (mGoogleApiClient!!.isConnected()) { mGoogleApiClient!!.disconnect() } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/dashboard/DashboardFragment.kt ================================================ package com.project.farmingapp.view.dashboard import android.content.Context import android.content.SharedPreferences import android.os.Bundle import android.preference.PreferenceManager import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.GridLayout import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.GridLayoutManager import com.bumptech.glide.Glide import com.google.gson.JsonObject import com.project.farmingapp.R import com.project.farmingapp.adapter.DashboardEcomItemAdapter import com.project.farmingapp.model.WeatherApi import com.project.farmingapp.model.data.WeatherRootList import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.view.articles.ArticleListFragment import com.project.farmingapp.view.articles.FruitsFragment import com.project.farmingapp.view.ecommerce.EcommerceItemFragment import com.project.farmingapp.view.weather.WeatherFragment import com.project.farmingapp.view.yojna.YojnaListFragment import com.project.farmingapp.viewmodel.ArticleViewModel import com.project.farmingapp.viewmodel.EcommViewModel import com.project.farmingapp.viewmodel.WeatherViewModel import kotlinx.android.synthetic.main.fragment_dashboard.* import org.json.JSONObject import retrofit2.Call import retrofit2.Callback import retrofit2.Response import kotlin.random.Random // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [dashboardFragment.newInstance] factory method to * create an instance of this fragment. */ class dashboardFragment : Fragment(), CellClickListener { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null lateinit var weatherFragment: WeatherFragment lateinit var fruitsFragment: FruitsFragment lateinit var yojnaListFragment: YojnaListFragment lateinit var articleListFragment: ArticleListFragment private lateinit var viewModel: WeatherViewModel private lateinit var viewModel2: EcommViewModel var data: WeatherRootList? = null lateinit var sharedPreferences: SharedPreferences override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } viewModel = ViewModelProviders.of(requireActivity()) .get(WeatherViewModel::class.java) viewModel2 = ViewModelProviders.of(requireActivity()) .get(EcommViewModel::class.java) viewModel2.loadAllEcommItems() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { viewModel.getCoordinates().observe(viewLifecycleOwner, Observer { Log.d("DashFrag", it.toString()) viewModel.updateNewData() val city = it.get(2) as String viewModel.newDataTrial.observe(viewLifecycleOwner, Observer { Log.d("Observed Here", "Yes") weathTempTextWeathFrag.text = (it.list[0].main.temp - 273).toInt().toString() + "\u2103" humidityTextWeathFrag.text = "Humidity: " + it!!.list[0].main.humidity.toString() + " %" windTextWeathFrag.text = "Wind: " + it!!.list[0].wind.speed.toString() + " km/hr" weatherCityTitle.text = city.toString() var iconcode = it!!.list[0].weather[0].icon var iconurl = "https://openweathermap.org/img/w/" + iconcode + ".png"; Glide.with(activity!!.applicationContext).load(iconurl) .into(weathIconImageWeathFrag) }) }) viewModel2.ecommLiveData.observe(viewLifecycleOwner, Observer { var itemsToShow = (0..it.size - 1).shuffled().take(4) as List val adapterEcomm = DashboardEcomItemAdapter(activity!!.applicationContext, it, itemsToShow, this) dashboardEcommRecycler.adapter = adapterEcomm dashboardEcommRecycler.layoutManager = GridLayoutManager(activity!!.applicationContext, 2) }) // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_dashboard, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Agri India" weatherCard.setOnClickListener { weatherFragment = WeatherFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, weatherFragment, "name2") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("name") .commit() data?.let { it1 -> viewModel.messageToB(it1) } } viewModel = ViewModelProviders.of(requireActivity()) .get(WeatherViewModel::class.java) viewModel.getMessageA() .observe(viewLifecycleOwner, object : Observer { override fun onChanged(t: WeatherRootList?) { Log.d("DashFrag Data Changed A", "B") } }) cat4.setOnClickListener { yojnaListFragment = YojnaListFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, yojnaListFragment, "yojnaListFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("yojnaListFrag") .commit() } cat5.setOnClickListener { articleListFragment = ArticleListFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, articleListFragment, "articlesListFrag") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("articlesListFrag") .commit() } } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment dashboardFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = dashboardFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onStop() { super.onStop() } override fun onCellClickListener(name: String) { val ecommerceItemFragment = EcommerceItemFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, ecommerceItemFragment, name) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("name") .commit() } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/ecommerce/CartFragment.kt ================================================ package com.project.farmingapp.view.ecommerce import android.content.Intent import android.os.Bundle import android.util.Log import android.view.* import android.widget.Toast import androidx.fragment.app.Fragment import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.auth.FirebaseAuth import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.ValueEventListener import com.project.farmingapp.PrePaymentFragment import com.project.farmingapp.R import com.project.farmingapp.adapter.CartItemsAdapter import com.project.farmingapp.utilities.CartItemBuy import com.project.farmingapp.viewmodel.EcommViewModel import kotlinx.android.synthetic.main.fragment_cart.* import kotlin.collections.HashMap // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [CartFragment.newInstance] factory method to * create an instance of this fragment. */ class CartFragment : Fragment(), CartItemBuy { private var param1: String? = null private var param2: String? = null var isOpened: Boolean = false var totalCount = 0 var totalPrice = 0 var items = HashMap() lateinit var ecommViewModel: EcommViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } ecommViewModel = EcommViewModel() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment setHasOptionsMenu(true) return inflater.inflate(R.layout.fragment_cart, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment CartFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = CartFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val firebaseDatabase = FirebaseDatabase.getInstance() val firebaseAuth = FirebaseAuth.getInstance() val cartRef = firebaseDatabase.getReference("${firebaseAuth.currentUser!!.uid}").child("cart") (activity as AppCompatActivity).supportActionBar?.title = "Cart" isOpened = true val postListener = object : ValueEventListener { override fun onCancelled(error: DatabaseError) { TODO("Not yet implemented") } override fun onDataChange(dataSnapshot: DataSnapshot) { if (dataSnapshot.exists()) { items = dataSnapshot.value as HashMap var totalCartPrice = 0 for ((key, value) in items) { val currVal = value as Map Log.d("Total Items", key.toString()) Log.d("Total Items", value.toString()) ecommViewModel.getSpecificItem("${key}") .observe(viewLifecycleOwner, Observer { totalCartPrice += currVal.get("quantity").toString() .toInt() * it.get("price").toString().toInt() + it.get("delCharge").toString().toInt() Log.d("Total Price", currVal.get("quantity").toString()) Log.d("Total Price", it.get("price").toString()) Log.d("Total Price - 2", (currVal.get("quantity").toString().toInt()*it.get("price").toString().toInt()).toString()) totalItemsValue.text = items.size.toString() totalCostValue.text = "\u20B9" + totalCartPrice.toString() }) Log.d("Total Price - 3", key.toString()) } if (isOpened == true) { totalItemsValue.text = items.size.toString() totalCostValue.text = "\u20B9" + totalCartPrice.toString() } val adapter = CartItemsAdapter(this@CartFragment, items, this@CartFragment) recyclerCart.adapter = adapter recyclerCart.layoutManager = LinearLayoutManager(activity!!.applicationContext) progress_cart.visibility = View.GONE loadingTitleText.visibility = View.GONE } else { Toast.makeText( activity!!.applicationContext, "Item Not Exist", Toast.LENGTH_SHORT ).show() progress_cart.visibility = View.GONE loadingTitleText.visibility = View.GONE } } } cartRef.addValueEventListener(postListener) buyAllBtn.setOnClickListener { // prePaymentfragment = PrePaymentFragment() // val bundle = Bundle() // // val transaction = activity!!.supportFragmentManager // .beginTransaction() // .replace(R.id.frame_layout, prePaymentfragment) // .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) // .setReorderingAllowed(true) // .addToBackStack("name") // .commit() //val TotalPrice=totalCostValue.text.toString() //var products_id:ArrayList // products_id.add() // Intent (activity!!.applicationContext, RazorPayActivity::class.java).also { // it.putExtra("tp",totalPrice) // it.putExtra() // startActivity(it) // } } } override fun addToOrders(productId: String, quantity: Int, itemCost: Int, deliveryCost: Int) { Intent(activity!!.applicationContext, RazorPayActivity::class.java).also { // it.putExtra("tp", "123") it.putExtra("productId", productId) it.putExtra("itemCost", itemCost.toString()) it.putExtra("quantity", quantity.toString()) it.putExtra("deliveryCost", deliveryCost.toString()) startActivity(it) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/ecommerce/EcommerceFragment.kt ================================================ package com.project.farmingapp.view.ecommerce import android.os.Bundle import android.util.Log import android.view.* import androidx.fragment.app.Fragment import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.chip.ChipGroup import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.Query import com.project.farmingapp.R import com.project.farmingapp.adapter.EcommerceAdapter import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.viewmodel.EcommViewModel import kotlinx.android.synthetic.main.fragment_ecommerce.* // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [EcommerceFragment.newInstance] factory method to * create an instance of this fragment. */ class EcommerceFragment : Fragment(), CellClickListener { private lateinit var viewmodel: EcommViewModel private var adapter: EcommerceAdapter? = null lateinit var ecommerceItemFragment: EcommerceItemFragment // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) viewmodel = ViewModelProviders.of(requireActivity()) .get(EcommViewModel::class.java) // viewmodel = ViewModelProviders.of(requireActivity()) // .get(EcommViewModel::class.java) viewmodel.loadAllEcommItems() } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment viewmodel = ViewModelProviders.of(requireActivity()) .get(EcommViewModel::class.java) viewmodel.ecommLiveData.observe(viewLifecycleOwner, Observer { adapter = EcommerceAdapter(activity!!.applicationContext, it, this) ecommrcyclr.adapter = adapter ecommrcyclr.layoutManager = LinearLayoutManager(activity!!.applicationContext) }) return inflater.inflate(R.layout.fragment_ecommerce, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "E-Commerce" chipgrp.check(R.id.chip1) viewmodel.loadAllEcommItems() chipgrp.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { R.id.chip1 -> { viewmodel.loadAllEcommItems().observe(viewLifecycleOwner, Observer { ecommrcyclr.adapter = EcommerceAdapter(activity!!.applicationContext, it, this) }) } R.id.chip2 -> { viewmodel.getSpecificCategoryItems("fertilizer") .observe(viewLifecycleOwner, Observer { ecommrcyclr.adapter = EcommerceAdapter(activity!!.applicationContext, it, this) }) } R.id.chip3 -> { viewmodel.getSpecificCategoryItems("pestiside") .observe(viewLifecycleOwner, Observer { ecommrcyclr.adapter = EcommerceAdapter(activity!!.applicationContext, it, this) }) } R.id.chip4 -> { viewmodel.getSpecificCategoryItems("machine") .observe(viewLifecycleOwner, Observer { ecommrcyclr.adapter = EcommerceAdapter(activity!!.applicationContext, it, this) }) } } } } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment EcommerceFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = EcommerceFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onCellClickListener(name: String) { ecommerceItemFragment = EcommerceItemFragment() val bundle = Bundle() bundle.putString("name", name) ecommerceItemFragment.setArguments(bundle) val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, ecommerceItemFragment, name) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("ecommItem") .commit() } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.cart_menu, menu) } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.cart_item -> { val cartFragment = CartFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, cartFragment) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("cart") .commit() } } return super.onOptionsItemSelected(item) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/ecommerce/EcommerceItemFragment.kt ================================================ package com.project.farmingapp.view.ecommerce import android.content.Intent import android.net.Uri import android.os.Bundle import android.text.Html import android.util.Log import android.view.* import androidx.fragment.app.Fragment import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import com.asura.library.posters.Poster import com.asura.library.posters.RawVideo import com.asura.library.posters.RemoteImage import com.asura.library.posters.RemoteVideo import com.asura.library.views.PosterSlider import com.google.common.base.MoreObjects import com.google.firebase.auth.FirebaseAuth import com.google.firebase.database.FirebaseDatabase import com.google.firebase.ktx.Firebase import com.project.farmingapp.R import com.project.farmingapp.adapter.AttributesNormalAdapter import com.project.farmingapp.adapter.AttributesSelectionAdapter import com.project.farmingapp.model.data.CartItem import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.viewmodel.EcommViewModel import kotlinx.android.synthetic.main.fragment_ecommerce_item.* import java.text.SimpleDateFormat import java.util.* import kotlin.collections.ArrayList // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [EcommItemFragment.newInstance] factory method to * create an instance of this fragment. */ class EcommerceItemFragment : Fragment(), CellClickListener { // TODO: Rename and change types of parameters private var param1: String? = null private lateinit var viewmodel: EcommViewModel private var param2: String? = null private var selectionAttribute = mutableMapOf() private var currentItemId: Any?= null lateinit var realtimeDatabase: FirebaseDatabase lateinit var firebaseAuth: FirebaseAuth val sdf = SimpleDateFormat("dd/M/yyyy hh:mm:ss") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } viewmodel = ViewModelProviders.of(requireActivity()) .get(EcommViewModel::class.java) Toast.makeText(activity!!.applicationContext, "Something" + tag, Toast.LENGTH_SHORT).show() realtimeDatabase = FirebaseDatabase.getInstance() firebaseAuth = FirebaseAuth.getInstance() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_ecommerce_item, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment EcommItemFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = EcommerceItemFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "E-Commerce" loadingText.text = "Loading..." val color1Params = color1.layoutParams val color2Params = color2.layoutParams val color3Params = color3.layoutParams val color4Params = color4.layoutParams val density = resources.displayMetrics.density color1Params.width = (density * 40).toInt() color1Params.height = (density * 35).toInt() color1.layoutParams = color1Params color1.setOnClickListener { color1Params.width = (density * 40).toInt() color1Params.height = (density * 35).toInt() color1.layoutParams = color1Params color3Params.width = (density * 30).toInt() color3Params.height = (density * 25).toInt() color3.layoutParams = color3Params color4Params.width = (density * 30).toInt() color4Params.height = (density * 25).toInt() color4.layoutParams = color4Params color2Params.width = (density * 30).toInt() color2Params.height = (density * 25).toInt() color2.layoutParams = color2Params } color2.setOnClickListener { color1Params.width = (density * 30).toInt() color1Params.height = (density * 25).toInt() color1.layoutParams = color1Params color3Params.width = (density * 30).toInt() color3Params.height = (density * 25).toInt() color3.layoutParams = color3Params color4Params.width = (density * 30).toInt() color4Params.height = (density * 25).toInt() color4.layoutParams = color4Params color2Params.width = (density * 40).toInt() color2Params.height = (density * 35).toInt() color2.layoutParams = color2Params } increaseQtyBtn.setOnClickListener { quantityCountEcomm.text = (quantityCountEcomm.text.toString().toInt() + 1).toString() } decreaseQtyBtn.setOnClickListener { if(quantityCountEcomm.text.toString().toInt() != 1){ quantityCountEcomm.text = (quantityCountEcomm.text.toString().toInt() - 1).toString() } } var posters: ArrayList = ArrayList() val allData = viewmodel.ecommLiveData.value val allDataLength = allData!!.size for (a in 0 until allDataLength){ if(allData[a].id == this.tag){ val specificData = allData[a] currentItemId = specificData.id!! productTitle.text = specificData.getString("title") productShortDescription.text = specificData.getString("shortDesc") productPrice.text = "₹" + specificData.getString("price") productLongDesc.text = specificData.getString("longDesc") howToUseText.text = specificData.getString("howtouse") deliverycost.text = specificData.getString("delCharge") Rating.rating = specificData.get("rating").toString().toFloat() var attributes = specificData.get("attributes") as Map if(attributes.contains("Color")){ colorLinear.visibility = View.VISIBLE colorTitle.visibility = View.VISIBLE } else{ colorLinear.visibility = View.GONE colorTitle.visibility = View.GONE } var allSelectionAttributes = mutableListOf>() var allNormalAttributes = mutableListOf>() for((key, value) in attributes){ var selectionMap = mutableMapOf() var normalMap = mutableMapOf() if(value is ArrayList<*> && key.toString()!="Color"){ selectionMap.put(key, value) allSelectionAttributes.add(selectionMap) } if(value is String){ normalMap.put(key, value) allNormalAttributes.add(normalMap) } } val adapter = AttributesSelectionAdapter(activity!!.applicationContext, allSelectionAttributes, this) recyclerSelectionAttributes.adapter = adapter recyclerSelectionAttributes.layoutManager = LinearLayoutManager(activity!!.applicationContext) val adapter2 = AttributesNormalAdapter(activity!!.applicationContext, allNormalAttributes) recyclerNormalAttributes.adapter = adapter2 recyclerNormalAttributes.layoutManager = LinearLayoutManager(activity!!.applicationContext) progress_ecommItem.visibility = View.GONE loadingText.visibility = View.GONE val allImages = specificData.get("imageUrl") as List for (a in allImages){ posters.add(RemoteImage("${a}")) } poster_slider.setPosters(posters) } else{ } } addToCart.setOnClickListener { addToCart.isClickable = false progress_ecommItem.visibility = View.VISIBLE loadingText.text = "Adding to Cart..." loadingText.visibility = View.GONE val realtimeRef = realtimeDatabase.getReference("${firebaseAuth.currentUser!!.uid}").child("cart").child("${currentItemId}") // selectionAttribute!!.put("quantity", quantityCountEcomm.text.toString().toInt()) // selectionAttribute.put("basePrice", productPrice.text.toString().toInt()) // selectionAttribute.put("delCharge", deliverycost.text.toString().toInt()) val currentDateTime = sdf.format(Date()) realtimeRef.setValue(CartItem(quantityCountEcomm.text.toString().toInt(), currentDateTime.toString())) .addOnCompleteListener { Toast.makeText(activity!!.applicationContext, "Item Added", Toast.LENGTH_SHORT).show() progress_ecommItem.visibility = View.GONE loadingText.visibility = View.GONE addToCart.isClickable = true }.addOnFailureListener { Toast.makeText(activity!!.applicationContext, "Please Try Again!", Toast.LENGTH_SHORT).show() progress_ecommItem.visibility = View.GONE loadingText.visibility = View.GONE addToCart.isClickable = true } } buynow.setOnClickListener { // var product_id = ArrayList() // var item_cost=ArrayList() // var item_qty=ArrayList() val productPrice = productPrice.text.toString().split("₹") as ArrayList // var totalPrice = quantityCountEcomm.text.toString().toInt()*productPrice[1].toString().toInt() + deliverycost.text.toString().toInt() // product_id.add(currentItemId as String) // item_cost.add(totalPrice) // item_qty.add(quantityCountEcomm.text.toString().toInt()) Intent(activity!!.applicationContext, RazorPayActivity::class.java).also { it.putExtra("productId",currentItemId.toString()) it.putExtra("itemCost",productPrice[1].toString()) it.putExtra("quantity", quantityCountEcomm.text.toString()) it.putExtra("deliveryCost", deliverycost.text.toString()) startActivity(it) } } } override fun onCellClickListener(name: String) { val selectionAttributeAllData = name.split(" ") as List Log.d("EcommItem", selectionAttributeAllData[0].toString()) Log.d("EcommItem", selectionAttributeAllData[1].toString()) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.cart_menu, menu) } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId){ R.id.cart_item -> { val cartFragment = CartFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, cartFragment) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("cart") .commit() } } return super.onOptionsItemSelected(item) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/ecommerce/MyOrdersFragment.kt ================================================ package com.project.farmingapp.view.ecommerce import android.content.Intent import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.auth.FirebaseAuth import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.ValueEventListener import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.R import com.project.farmingapp.adapter.MyOrdersAdapter import com.project.farmingapp.utilities.CartItemBuy import com.project.farmingapp.utilities.CellClickListener import kotlinx.android.synthetic.main.fragment_my_orders.* import kotlin.collections.HashMap // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [MyOrdersFragment.newInstance] factory method to * create an instance of this fragment. */ class MyOrdersFragment : Fragment(), CellClickListener, CartItemBuy { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null lateinit var firebaseDatabase: FirebaseDatabase lateinit var firebaseAuth: FirebaseAuth lateinit var firebaseFirestore: FirebaseFirestore var orders = HashMap() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } firebaseDatabase = FirebaseDatabase.getInstance() firebaseAuth = FirebaseAuth.getInstance() firebaseFirestore = FirebaseFirestore.getInstance() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_my_orders, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment MyOrdersFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = MyOrdersFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val orderRef = firebaseDatabase.getReference("${firebaseAuth.currentUser!!.uid}").child("orders") (activity as AppCompatActivity).supportActionBar?.title = "My Orders" val orderListener = object : ValueEventListener{ override fun onCancelled(error: DatabaseError) { TODO("Not yet implemented") } override fun onDataChange(snapshot: DataSnapshot) { if(snapshot.exists()){ orders = snapshot.value as HashMap var myOrdersAdapter = MyOrdersAdapter(this@MyOrdersFragment, orders, this@MyOrdersFragment, this@MyOrdersFragment) myOrderRecycler.adapter = myOrdersAdapter myOrderRecycler.layoutManager = LinearLayoutManager(activity!!.applicationContext) } } } orderRef.addValueEventListener(orderListener) } override fun onCellClickListener(name: String) { val ecommerceItemFragment = EcommerceItemFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, ecommerceItemFragment, name) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("ecommItem") .commit() } override fun addToOrders(productId: String, quantity: Int, itemCost: Int, deliveryCost: Int) { Intent(activity!!.applicationContext, RazorPayActivity::class.java).also { it.putExtra("productId", productId) it.putExtra("itemCost", itemCost.toString()) it.putExtra("quantity", quantity.toString()) it.putExtra("deliveryCost", deliveryCost.toString()) startActivity(it) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/ecommerce/PaymentFragment.kt ================================================ package com.project.farmingapp.view.ecommerce import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.project.farmingapp.R // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [EcommercePaymentFragment.newInstance] factory method to * create an instance of this fragment. */ class PaymentFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_payment, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment EcommercePaymentFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = PaymentFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/ecommerce/RazorPayActivity.kt ================================================ package com.project.farmingapp.view.ecommerce import android.app.Activity import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Toast import androidx.fragment.app.FragmentTransaction import com.google.firebase.auth.FirebaseAuth import com.google.firebase.database.FirebaseDatabase import com.project.farmingapp.R import com.project.farmingapp.model.data.orders import com.razorpay.Checkout import com.razorpay.PaymentResultListener import kotlinx.android.synthetic.main.activity_razor_pay.* import kotlinx.android.synthetic.main.fragment_ecommerce_item.* import org.json.JSONObject import java.text.SimpleDateFormat import java.util.* import kotlin.collections.ArrayList class RazorPayActivity : AppCompatActivity(), PaymentResultListener { lateinit var firebaseAuth: FirebaseAuth val sdf = SimpleDateFormat("dd/M/yyyy hh:mm:ss") var postId: UUID? = null var name: String = "" var locality: String = "" var city: String = "" var state: String = "" var pincode: String = "" var mobile: String = "" var currentDate = sdf.format(Date()) lateinit var realtimeDatabase: FirebaseDatabase var productId: String? = null var totalPrice = 0 var itemCost: Int? = null var quantity: Int? = null var deliveryCost: Int? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_razor_pay) postId = UUID.randomUUID() //val totalCost=intent.getStringExtra("tp") firebaseAuth = FirebaseAuth.getInstance() productId = intent.getStringExtra("productId") itemCost = intent.getStringExtra("itemCost")!!.toString().toInt() quantity = intent.getStringExtra("quantity")!!.toString().toInt() deliveryCost = intent.getStringExtra("deliveryCost")!!.toString().toInt() Log.d("tp", productId.toString()) Log.d("tp", itemCost.toString()) Log.d("tp", quantity.toString()) Log.d("tp", deliveryCost.toString()) // Toast.makeText(this,abc,Toast.LENGTH_LONG).show() //Log.d("tp",abc.toString()) orderNowBtn.setOnClickListener { name = fullNamePrePay.text.toString() locality = localityPrePay.text.toString() city = cityPrePay.text.toString() state = statePrePay.text.toString() pincode = pincodePrePay.text.toString() mobile = mobileNumberPrePay.text.toString() if (name.isNullOrEmpty() || locality.isNullOrEmpty() || city.isNullOrEmpty() || state.isNullOrEmpty() || pincode.isNullOrEmpty() || mobile.isNullOrEmpty() ) { Toast.makeText(this, "Please Add all Fields", Toast.LENGTH_LONG).show() } //add inputfield validation else { //add inputfield validation Toast.makeText(this, "Done", Toast.LENGTH_LONG).show() startPayment() } } netValue.text = "Net Value: ₹ " + (itemCost.toString().toInt() * quantity!! + deliveryCost!!).toString() } private fun startPayment() { /* * You need to pass current activity in order to let Razorpay create CheckoutActivity * */ val activity: Activity = this val co = Checkout() try { val options = JSONObject() options.put("name", "FarmingApp") options.put("description", "Demoing Charges") //You can omit the image option to fetch the image from dashboard options.put("image", "https://s3.amazonaws.com/rzp-mobile/images/rzp.png") options.put("currency", "INR") totalPrice = itemCost!! * quantity!! + deliveryCost!! options.put("amount", "${totalPrice!! * 100}") val prefill = JSONObject() prefill.put("email", "${firebaseAuth.currentUser!!.email}") prefill.put("contact", "${mobile}") options.put("prefill", prefill) co.open(activity, options) } catch (e: Exception) { Toast.makeText(activity, "Error in payment: " + e.message, Toast.LENGTH_LONG).show() e.printStackTrace() } } override fun onPaymentError(p0: Int, p1: String?) { try { Toast.makeText(this, "Payment Failed", Toast.LENGTH_LONG).show() } catch (e: Exception) { Log.e("failed", "Exception in onPaymentSuccess", e) } } override fun onPaymentSuccess(p0: String?) { try { firebaseAuth = FirebaseAuth.getInstance() realtimeDatabase = FirebaseDatabase.getInstance() var orderRef = realtimeDatabase.getReference("${firebaseAuth.currentUser!!.uid}").child("orders") .child("${postId}") val currDate = System.currentTimeMillis() var date1 = Date() val calendar = Calendar.getInstance() calendar.time = date1 var randomDay = (0..12).shuffled().take(1) as List val sdf = SimpleDateFormat("dd/MM/yyyy") calendar.add(Calendar.DATE, randomDay[0]) date1 = calendar.time // calendar.timeInMillis // Toast.makeText(this, randomDay[0].toString(), Toast.LENGTH_LONG).show() // Toast.makeText(this, calendar.timeInMillis.toString(), Toast.LENGTH_LONG).show() orderRef.setValue( orders( name!!, locality!!, city!!, state!!, pincode!!, mobile!!, currentDate, productId!!, itemCost!!, quantity!!, deliveryCost!!, "Arriving By: " + sdf.format(date1).toString() ) ).addOnCompleteListener { Toast.makeText(this, "Payment Successful", Toast.LENGTH_LONG).show() finish() }.addOnFailureListener { Toast.makeText(this, "Payment Failed", Toast.LENGTH_LONG).show() Toast.makeText(this, "Please Try Again", Toast.LENGTH_LONG).show() finish() } } catch (e: Exception) { Log.e("success", "Exception in onPaymentSuccess", e) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/introscreen/IntroActivity.kt ================================================ package com.project.farmingapp.view.introscreen import android.content.Context import android.content.Intent import android.content.SharedPreferences import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.preference.PreferenceManager import android.util.Log import android.view.ViewGroup import android.widget.ImageView import android.widget.LinearLayout import android.widget.Toast import androidx.core.content.ContextCompat import androidx.core.view.get import androidx.viewpager2.widget.ViewPager2 import com.project.farmingapp.R import com.project.farmingapp.adapter.IntroAdapter import com.project.farmingapp.model.data.IntroData import com.project.farmingapp.view.auth.LoginActivity import kotlinx.android.synthetic.main.activity_intro.* class IntroActivity : AppCompatActivity() { private val introSliderAdapter = IntroAdapter( listOf( IntroData( "Welcome to the\n\bFarming App\b", "Best Guide and Helper for any Farmer. Provides various features at one place!", R.drawable.intro_first ), IntroData( "Read Articles", "Read Online articles related to Farming Concepts, Technologies and other useful knowledge.", R.drawable.intro_read ), IntroData( "Share Knowledge", "Social Media let's you share knowledge with other farmers!\nCreate your own posts using Image/Video/Texts.", R.drawable.intro_share ), IntroData( "E-Commerce", "Buy / Sell Agriculture related products & Manage your Cart Online", R.drawable.intro_ecomm ), IntroData( "Weather Forecast", "Get Notified for Daily Weather Conditions. 24x7 Data", R.drawable.intro_weather ), IntroData( "APMC Statistics", "Get updates APMC Pricing and Commidity details everyday.", R.drawable.intro_statistics ), IntroData( "Let's Grow Together", "- Farming App", R.drawable.intro_help ) ) ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_intro) sliderViewPager.adapter = introSliderAdapter setupIndicators() setCurrentIndicator(0) sliderViewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { super.onPageSelected(position) setCurrentIndicator(position) } }) if(sliderViewPager.currentItem + 1 == introSliderAdapter.itemCount){ Log.d("IntroActivity", sliderViewPager.currentItem.toString()) Log.d("IntroActivity", introSliderAdapter.itemCount.toString()) nextBtn.text = "Get Started" } else{ nextBtn.text = "Next" } nextBtn.setOnClickListener { if (sliderViewPager.currentItem + 1 < introSliderAdapter.itemCount) { sliderViewPager.currentItem += 1 // Toast.makeText(this, "Current: ${sliderViewPager.currentItem}", Toast.LENGTH_SHORT).show() nextBtn.text = "Next" if(sliderViewPager.currentItem + 1 == introSliderAdapter.itemCount){ Log.d("IntroActivity", sliderViewPager.currentItem.toString()) Log.d("IntroActivity", introSliderAdapter.itemCount.toString()) nextBtn.text = "Get Started" } } else { Intent(this, LoginActivity::class.java).also { startActivity(it) } val sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE) val editor = sharedPreferences.edit() editor.putBoolean("firstTime", false) editor.apply() finish() } } skipIntro.setOnClickListener { Intent(this, LoginActivity::class.java).also { startActivity(it) } val sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE) val editor = sharedPreferences.edit() editor.putBoolean("firstTime", false) editor.apply() finish() } } private fun setupIndicators() { val indicators = arrayOfNulls(introSliderAdapter.itemCount) val layoutParams: LinearLayout.LayoutParams = LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ) layoutParams.setMargins(8, 0, 8, 0) for (i in indicators.indices) { indicators[i] = ImageView(applicationContext) indicators[i].apply { this?.setImageDrawable( ContextCompat.getDrawable( applicationContext, R.drawable.indicator_inactive ) ) this?.layoutParams = layoutParams } sliderballs_container.addView(indicators[i]) } } private fun setCurrentIndicator(index: Int) { val childCount = sliderballs_container.childCount for (i in 0 until childCount) { val imageView = sliderballs_container.get(i) as ImageView if (i == index) { imageView.setImageDrawable( ContextCompat.getDrawable( applicationContext, R.drawable.indicator_active ) ) } else { imageView.setImageDrawable( ContextCompat.getDrawable( applicationContext, R.drawable.indicator_inactive ) ) } } if(index == introSliderAdapter.itemCount - 1){ nextBtn.text = "Get Started" } else{ nextBtn.text = "Next" } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/socialmedia/SMCreatePostFragment.kt ================================================ package com.project.farmingapp.view.socialmedia import android.app.Activity import android.content.Intent import android.graphics.Bitmap import android.net.Uri import android.os.Bundle import android.provider.MediaStore import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.ViewModelProviders import com.google.android.gms.tasks.Continuation import com.google.android.gms.tasks.Task import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.FieldValue import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.StorageReference import com.google.firebase.storage.UploadTask import com.project.farmingapp.R import com.project.farmingapp.viewmodel.UserDataViewModel import com.project.farmingapp.viewmodel.UserProfilePostsViewModel import kotlinx.android.synthetic.main.fragment_s_m_create_post.* import kotlinx.android.synthetic.main.nav_header.view.* import java.io.IOException import java.util.* // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [SMCreatePostFragment.newInstance] factory method to * create an instance of this fragment. */ class SMCreatePostFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null private val PICK_IMAGE_REQUEST = 71 private var filePath: Uri? = null private var firebaseStore: FirebaseStorage? = null private var storageReference: StorageReference? = null private var authUser: FirebaseAuth? = null private var postID: UUID? = null private var bitmap: Bitmap? = null lateinit var socialMediaPostsFragment: SocialMediaPostsFragment lateinit var userDataViewModel : UserDataViewModel val db = FirebaseFirestore.getInstance() val data2 = HashMap() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } storageReference = FirebaseStorage.getInstance().reference authUser = FirebaseAuth.getInstance() firebaseStore = FirebaseStorage.getInstance() userDataViewModel = ViewModelProviders.of(requireActivity()) .get(UserDataViewModel::class.java) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_s_m_create_post, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment SMCreatePostFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = SMCreatePostFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Social Media" progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE data2["uploadType"] = "" uploadImagePreview.setOnClickListener { val intent = Intent() intent.type = "image/* video/*" intent.action = Intent.ACTION_PICK startActivityForResult( Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST ) } val googleLoggedUser = authUser!!.currentUser!!.displayName if (googleLoggedUser.isNullOrEmpty()) { db.collection("users").document(authUser!!.currentUser!!.email!!) .get() .addOnCompleteListener { val data = it.result data2["name"] = data!!.getString("name").toString() Log.d("Google User", data!!.getString("name")) } } else { data2["name"] = googleLoggedUser.toString() Log.d("Normal User", googleLoggedUser) } createPostBtnSM.setOnClickListener { if (postTitleSM.text.toString().isNullOrEmpty()) { Toast.makeText( activity!!.applicationContext, "Please enter title", Toast.LENGTH_SHORT ).show() } else { uploadImage().setImageBitmap(bitmap) } } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK) { if (data == null || data.data == null) { return } filePath = data.data uploadImagePreview.setImageURI(filePath) try { val lastIndex = filePath.toString().length - 1 val type = filePath.toString().slice((filePath.toString().lastIndexOf(".") + 1)..lastIndex) Log.d("File Type", filePath.toString()) if (filePath.toString().contains("png") || filePath.toString().contains("jpg") || filePath.toString().contains("jpeg") || filePath.toString().contains("image") || filePath.toString().contains("images")){ data2["uploadType"] = "image" } else if(filePath.toString().contains("videos") || filePath.toString().contains("video") || filePath.toString().contains("mp4")){ data2["uploadType"] = "video" } Log.d("File Type 3", data2["uploadType"].toString()) bitmap = MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath) // uploadImage().setImageBitmap(bitmap) } catch (e: IOException) { e.printStackTrace() } } } private fun uploadImage() { progress_create_post.visibility = View.VISIBLE progressTitle.visibility = View.VISIBLE if (filePath != null) { postID = UUID.randomUUID() val ref = storageReference?.child("posts/" + postID.toString()) val uploadTask = ref?.putFile(filePath!!) val urlTask = uploadTask?.continueWithTask(Continuation> { task -> if (!task.isSuccessful) { task.exception?.let { throw it progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE } } return@Continuation ref.downloadUrl })?.addOnCompleteListener { task -> if (task.isSuccessful) { val downloadUri = task.result addUploadRecordWithImageToDb(downloadUri.toString(), postID!!) // progress_create_post.visibility = View.GONE // progressTitle.visibility = View.GONE } else { // Handle failures progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE } }?.addOnFailureListener { progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE Toast.makeText(activity!!.applicationContext, it.message, Toast.LENGTH_LONG).show() } } else { data2["uploadType"] = "" addUploadRecordWithImageToDb(null, null) Log.d("File Type 2", "Null") } } private fun addUploadRecordWithTextToDb() { addUploadRecordWithImageToDb(null, null) } private fun addUploadRecordWithImageToDb(uri: String?, postID: UUID?) { if (!uri.isNullOrEmpty()) { data2["imageUrl"] = uri.toString() data2["imageID"] = postID.toString() } val data3 = HashMap() val postTimeStamp = System.currentTimeMillis() data2["userID"] = authUser!!.currentUser?.email.toString() data2["timeStamp"] = postTimeStamp data2["title"] = postTitleSM.text.toString() data2["description"] = descPostSM.text.toString() db.collection("posts") .add(data2) .addOnSuccessListener { documentReference -> val data = HashMap() val posts = arrayListOf() val postRecordID = documentReference.id.toString() posts.add(postRecordID) data["posts"] = posts db.collection("users") .document("${authUser!!.currentUser?.email.toString()}") .update("posts", FieldValue.arrayUnion(postRecordID)) .addOnSuccessListener { documentReference -> Toast.makeText( activity!!.applicationContext, "Post Created", Toast.LENGTH_LONG ).show() progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE userDataViewModel.getUserData(authUser!!.currentUser?.email.toString()) socialMediaPostsFragment = SocialMediaPostsFragment() val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, socialMediaPostsFragment, "smPostList") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("smPostList") .commit() } .addOnFailureListener { e -> Toast.makeText( activity!!.applicationContext, "Error saving to DB", Toast.LENGTH_LONG ).show() progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE } } .addOnFailureListener { e -> Toast.makeText( activity!!.applicationContext, "Error saving to DB", Toast.LENGTH_LONG ).show() progress_create_post.visibility = View.GONE progressTitle.visibility = View.GONE } } } private fun Any.setImageBitmap(bitmap: Bitmap?) { } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/socialmedia/SocialMediaPostsFragment.kt ================================================ package com.project.farmingapp.view.socialmedia import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.behavior.SwipeDismissBehavior import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.Query import com.project.farmingapp.R import com.project.farmingapp.adapter.CurrentWeatherAdapter import com.project.farmingapp.adapter.SMPostListAdapter import com.project.farmingapp.viewmodel.ArticleViewModel import com.project.farmingapp.viewmodel.SocialMediaViewModel import kotlinx.android.synthetic.main.fragment_social_media_posts.* import kotlinx.android.synthetic.main.fragment_weather.* import com.project.farmingapp.adapter.PaginationListener.Companion.PAGE_START import kotlin.coroutines.EmptyCoroutineContext // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" private lateinit var viewModel: SocialMediaViewModel /** * A simple [Fragment] subclass. * Use the [SocialMediaPostsFragment.newInstance] factory method to * create an instance of this fragment. */ class SocialMediaPostsFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null lateinit var smCreatePostFragment: SMCreatePostFragment private var adapter : SMPostListAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } viewModel = ViewModelProviders.of(requireActivity()) .get(SocialMediaViewModel::class.java) // viewModel.loadPosts() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_social_media_posts, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment SocialMediaPostsFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = SocialMediaPostsFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } fun getData() { val firebaseFirestore: FirebaseFirestore = FirebaseFirestore.getInstance() firebaseFirestore.collection("posts").orderBy("timeStamp", Query.Direction.DESCENDING).get() .addOnSuccessListener { Log.d("Posts data", it.documents.toString()) adapter = SMPostListAdapter(activity!!.applicationContext, it.documents) postsRecycler.adapter = adapter postsRecycler.layoutManager = LinearLayoutManager(activity!!.applicationContext) } .addOnFailureListener { } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Social Media" getData() smCreatePostFragment = SMCreatePostFragment() createPostFloating.setOnClickListener { val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, smCreatePostFragment, "smCreate") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("smCreate") .commit() } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/user/UserFragment.kt ================================================ package com.project.farmingapp.view.user import android.app.Activity import android.app.AlertDialog import android.content.Intent import android.graphics.Bitmap import android.graphics.Color import android.graphics.Paint import android.net.Uri import android.os.Bundle import android.provider.MediaStore import android.service.autofill.UserData import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import android.widget.Toast import androidx.core.graphics.toColorInt import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import com.bumptech.glide.Glide import com.google.android.gms.tasks.Continuation import com.google.android.gms.tasks.Task import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.StorageReference import com.google.firebase.storage.UploadTask import com.project.farmingapp.R import com.project.farmingapp.adapter.PostListUserProfileAdapter import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.view.user.setImageBitmap import com.project.farmingapp.viewmodel.ArticleViewModel import com.project.farmingapp.viewmodel.UserDataViewModel import com.project.farmingapp.viewmodel.UserProfilePostsViewModel import kotlinx.android.synthetic.main.fragment_user.* import java.io.IOException import java.util.* import kotlin.collections.ArrayList // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" private lateinit var viewModel: UserProfilePostsViewModel private lateinit var userDataViewModel: UserDataViewModel /** * A simple [Fragment] subclass. * Use the [UserFragment.newInstance] factory method to * create an instance of this fragment. */ class UserFragment : Fragment(), CellClickListener { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null private val PICK_IMAGE_REQUEST = 71 private var filePath: Uri? = null private var postID: UUID? = null private var storageReference: StorageReference? = null private var bitmap: Bitmap? = null private var uploadProfOrBack: Int? = null val firebaseFirestore = FirebaseFirestore.getInstance() val firebaseAuth = FirebaseAuth.getInstance() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } viewModel = ViewModelProviders.of(requireActivity()) .get(UserProfilePostsViewModel::class.java) userDataViewModel = ViewModelProviders.of(requireActivity()) .get(UserDataViewModel::class.java) storageReference = FirebaseStorage.getInstance().reference viewModel.getAllPosts(firebaseAuth.currentUser!!.email) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment viewModel.liveData1.observe(viewLifecycleOwner, Observer { if (it != null) { viewModel.getAllPostsOfUser(it) } }) viewModel.liveData2.observe(viewLifecycleOwner, Observer { if (it != null) { Log.d("Live Data In Frag", it.toString()) } }) viewModel.userProfilePostsLiveData2.observe(viewLifecycleOwner, Observer { Log.d("Some Part 2", it.toString()) }) return inflater.inflate(R.layout.fragment_user, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment UserFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = UserFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Profile" // addAboutTextUserFrag.paintFlags = Paint.UNDERLINE_TEXT_FLAG cityEditUserProfile.visibility = View.GONE viewModel.userProfilePostsLiveData.observe(viewLifecycleOwner, Observer { Log.d("Some Part", it.toString()) }) userDataViewModel.userliveData.observe(viewLifecycleOwner, Observer { Log.d("User Fragment", it.data.toString()) }) // aboutValueUserProfileFrag.setOnClickListener { // aboutValueEditUserProfileFrag.visibility = View.VISIBLE // addAboutTextUserFrag.visibility = View.GONE // aboutValueEditUserProfileFrag.setText(aboutValueUserProfileFrag.text.toString()) // aboutValueUserProfileFrag.visibility = View.GONE // saveBtnAboutUserProfileFrag.visibility = View.VISIBLE // } // addAboutTextUserFrag.setOnClickListener { // aboutValueEditUserProfileFrag.visibility = View.VISIBLE // saveBtnAboutUserProfileFrag.visibility = View.VISIBLE // } // saveBtnAboutUserProfileFrag.setOnClickListener { // aboutValueUserProfileFrag.visibility = View.VISIBLE // aboutValueUserProfileFrag.text = aboutValueEditUserProfileFrag.text // saveBtnAboutUserProfileFrag.visibility = View.GONE // userDataViewModel.updateUserField(activity!!.applicationContext, firebaseAuth.currentUser!!.email.toString() as String, aboutValueEditUserProfileFrag.text.toString() as String, null) // aboutValueEditUserProfileFrag.visibility = View.GONE // } uploadProgressBarProfile.visibility = View.GONE uploadBackProgressProfile.visibility = View.GONE uploadUserBackgroundImage.setOnClickListener { val intent = Intent() intent.type = "image/* video/*" intent.action = Intent.ACTION_PICK startActivityForResult( Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST ) uploadProfOrBack = 1 Toast.makeText(activity!!.applicationContext, "Uploading Background Image", Toast.LENGTH_SHORT).show() } uploadProfilePictureImage.setOnClickListener { val intent = Intent() intent.type = "image/* video/*" intent.action = Intent.ACTION_PICK startActivityForResult( Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST ) uploadProfOrBack = 0 Toast.makeText(activity!!.applicationContext, "Uploading your Image", Toast.LENGTH_SHORT).show() } userDataViewModel.userliveData.observe(viewLifecycleOwner, Observer { Log.d("User Data in VM Frag", it.get("name").toString()) Log.d("Data in User", it.toString()) userNameUserProfileFrag.text = it!!.getString("name") val city = it?.getString("city") if(city == null){ userCityUserProfileFrag.text = "City: " } else{ userCityUserProfileFrag.text = "City: " + it.getString("city") } if(it?.get("profileImage") == null || it?.getString("profileImage").isNullOrBlank()){ uploadProfilePictureImage.visibility = View.VISIBLE } else{ uploadProfilePictureImage.visibility = View.GONE Glide.with(activity!!.applicationContext).load(it?.get("profileImage")) .into(userImageUserFrag) } if(it?.get("backImage") == null || it?.getString("backImage").isNullOrBlank()){ uploadUserBackgroundImage.visibility = View.VISIBLE } else{ uploadUserBackgroundImage.visibility = View.GONE Glide.with(activity!!.applicationContext).load(it?.getString("backImage")) .into(userBackgroundImage) } val posts = it.get("posts") as List userPostsCountUserProfileFrag.text = "Posts: " + posts.size.toString() userEmailUserProfileFrag.text = firebaseAuth.currentUser!!.email val about = it?.getString("about") if (about == null || about == "") { aboutValueUserProfileFrag.visibility = View.GONE aboutValueEditUserProfileFrag.visibility = View.GONE saveBtnAboutUserProfileFrag.visibility = View.GONE } else { aboutValueUserProfileFrag.visibility = View.VISIBLE aboutValueEditUserProfileFrag.visibility = View.GONE saveBtnAboutUserProfileFrag.visibility = View.GONE aboutValueUserProfileFrag.text = about } }) imageEdit.setOnClickListener { uploadProfilePictureImage.visibility = View.VISIBLE uploadUserBackgroundImage.visibility = View.VISIBLE imageChecked.visibility = View.VISIBLE imageEdit.visibility = View.GONE cityEditUserProfile.setText(userCityUserProfileFrag!!.text.toString().removePrefix("City: ")) cityEditUserProfile.visibility = View.VISIBLE aboutValueEditUserProfileFrag.visibility = View.VISIBLE aboutValueEditUserProfileFrag.setText(aboutValueUserProfileFrag.text.toString()) aboutValueUserProfileFrag.visibility = View.GONE } imageChecked.setOnClickListener { uploadProfilePictureImage.visibility = View.GONE uploadUserBackgroundImage.visibility = View.GONE imageEdit.visibility = View.VISIBLE cityEditUserProfile.visibility = View.GONE imageChecked.visibility = View.GONE userDataViewModel.updateUserField(activity!!.applicationContext, firebaseAuth.currentUser!!.email.toString() as String, aboutValueEditUserProfileFrag.text.toString(), cityEditUserProfile.text.toString()) userDataViewModel.getUserData(firebaseAuth.currentUser!!.email.toString()) aboutValueEditUserProfileFrag.visibility = View.GONE aboutValueUserProfileFrag.visibility = View.VISIBLE } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK) { if (data == null || data.data == null) { return } filePath = data.data try { bitmap = MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath) if(bitmap!=null){ Log.d("UserFragment", bitmap.toString()) if(uploadProfOrBack == 0){ uploadProgressBarProfile.visibility = View.VISIBLE uploadProfilePictureImage.visibility = View.GONE } else if(uploadProfOrBack == 1){ uploadBackProgressProfile.visibility = View.VISIBLE uploadUserBackgroundImage.visibility = View.GONE } uploadImage2().setImageBitmap(bitmap) } } catch (e: IOException) { e.printStackTrace() } } } private fun uploadImage2() { if (filePath != null) { postID = UUID.randomUUID() val ref = storageReference?.child("users/" + postID.toString()) val uploadTask = ref?.putFile(filePath!!) Log.d("UserFragment", filePath.toString()) val urlTask = uploadTask?.continueWithTask(Continuation> { task -> if (!task.isSuccessful) { Toast.makeText(activity!!.applicationContext, "Error in Uploading", Toast.LENGTH_SHORT).show() task.exception?.let { throw it } } return@Continuation ref.downloadUrl })?.addOnCompleteListener { task -> if (task.isSuccessful) { val downloadUri = task.result Toast.makeText(activity!!.applicationContext, "Uploading...", Toast.LENGTH_SHORT).show() uploadUserPhotos(downloadUri.toString(), postID!!) } else { // Handle failures Toast.makeText(activity!!.applicationContext, "Error", Toast.LENGTH_SHORT).show() uploadProgressBarProfile.visibility = View.GONE uploadBackProgressProfile.visibility = View.GONE uploadUserBackgroundImage.visibility = View.VISIBLE uploadProfilePictureImage.visibility = View.VISIBLE } }?.addOnFailureListener { Toast.makeText(activity!!.applicationContext, "Error2", Toast.LENGTH_SHORT).show() uploadProgressBarProfile.visibility = View.GONE uploadBackProgressProfile.visibility = View.GONE uploadUserBackgroundImage.visibility = View.VISIBLE uploadProfilePictureImage.visibility = View.VISIBLE } } else { } } fun uploadUserPhotos(uri: String?, postID: UUID?){ if(uploadProfOrBack == 0){ firebaseFirestore.collection("users").document(firebaseAuth.currentUser!!.email!!) .update(mapOf( "profileImage" to uri )) .addOnSuccessListener { Toast.makeText(activity!!.applicationContext, "Profile Updated", Toast.LENGTH_SHORT).show() uploadProgressBarProfile.visibility = View.GONE imageEdit.visibility = View.VISIBLE imageChecked.visibility = View.GONE userImageUserFrag.setImageBitmap(bitmap) userDataViewModel.getUserData(firebaseAuth!!.currentUser!!.email.toString()) } .addOnFailureListener { uploadProgressBarProfile.visibility = View.GONE userImageUserFrag.visibility = View.VISIBLE Toast.makeText(activity!!.applicationContext, "Failed to Update Profile", Toast.LENGTH_SHORT).show() } } else if(uploadProfOrBack == 1){ firebaseFirestore.collection("users").document(firebaseAuth.currentUser!!.email!!) .update(mapOf( "backImage" to uri )) .addOnSuccessListener { Toast.makeText(activity!!.applicationContext, "Profile Updated 2", Toast.LENGTH_SHORT).show() uploadBackProgressProfile.visibility = View.GONE userBackgroundImage.setImageBitmap(bitmap) imageEdit.visibility = View.VISIBLE imageChecked.visibility = View.GONE userDataViewModel.getUserData(firebaseAuth!!.currentUser!!.email.toString()) } .addOnFailureListener { uploadBackProgressProfile.visibility = View.GONE userBackgroundImage.setImageBitmap(bitmap) Toast.makeText(activity!!.applicationContext, "Failed to Update Profile", Toast.LENGTH_SHORT).show() } } } override fun onCellClickListener(name: String) { val dialog = AlertDialog.Builder(activity) dialog.setTitle("Your Post") .setMessage("Do you want to edit your post?") .setPositiveButton("View") { dialogInterface, i -> } .setNegativeButton("Delete") { dialogInterface, i -> userDataViewModel.deleteUserPost(firebaseAuth.currentUser!!.email!!, name) userDataViewModel.getUserData(firebaseAuth.currentUser!!.email.toString()) viewModel.getAllPosts(firebaseAuth.currentUser!!.email) } .setNeutralButton("Cancel"){ dialogInterface, i -> } .show() Toast.makeText(activity!!.applicationContext, "You Clicked" + name.toString(), Toast.LENGTH_SHORT).show() } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel.liveData3.observe(this, Observer { Log.d("All Posts", it.toString()) val adapter = PostListUserProfileAdapter(activity!!.applicationContext, it, this) userProfilePostsRecycler.adapter = adapter userProfilePostsRecycler.layoutManager = LinearLayoutManager(activity!!.applicationContext) adapter.notifyDataSetChanged() }) } } private fun Any.setImageBitmap(bitmap: Bitmap?) { } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/weather/WeatherFragment.kt ================================================ package com.project.farmingapp.view.weather import android.os.Build import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils import android.widget.Toast import androidx.annotation.Nullable import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.project.farmingapp.R import com.project.farmingapp.adapter.CurrentWeatherAdapter import com.project.farmingapp.adapter.WeatherAdapter import com.project.farmingapp.databinding.FragmentWeatherBinding import com.project.farmingapp.model.WeatherApi import com.project.farmingapp.databinding.FragmentWeatherBindingImpl import com.project.farmingapp.model.data.Weather import com.project.farmingapp.model.data.WeatherList import com.project.farmingapp.model.data.WeatherRootList import com.project.farmingapp.viewmodel.WeatherListener import com.project.farmingapp.viewmodel.WeatherViewModel import kotlinx.android.synthetic.main.fragment_weather.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [WeatherFragment.newInstance] factory method to * create an instance of this fragment. */ class WeatherFragment : Fragment(), WeatherListener { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null lateinit var Adapter: WeatherAdapter lateinit var Adapter2: CurrentWeatherAdapter private lateinit var viewModel: WeatherViewModel private var fragmentWeatherBinding: FragmentWeatherBinding? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } // init ViewModel viewModel = ViewModelProviders.of(requireActivity()) .get(WeatherViewModel::class.java) val bundle = this.arguments if (bundle != null) { Log.d("WeatherFrag Bundle", bundle.getString("key")) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return inflater.inflate(R.layout.fragment_weather, container, false) } @RequiresApi(Build.VERSION_CODES.M) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Weather Forecast" val city = viewModel.getCoordinates().value weatherCity.text = city!!.get(2).toString() val newWeatherData = viewModel.newDataTrial.value Log.d("New Data Weather Trial", newWeatherData.toString()) var firstDate = newWeatherData!!.list[0].dt_txt.slice(8..9) var otherDates = firstDate var i = 1 var data2 = mutableListOf() while (otherDates == firstDate) { data2!!.add(newWeatherData.list[i - 1]) otherDates = newWeatherData.list[i].dt_txt.slice(8..9) i += 1 } var data3 = mutableListOf() for (a in i - 1..39) { if (newWeatherData.list[a].dt_txt.slice(11..12) == "12") { Log.d("Something date", newWeatherData.list[a].dt_txt) data3.add(newWeatherData.list[a]) } } Adapter = WeatherAdapter(activity!!.applicationContext, data3) Adapter2 = CurrentWeatherAdapter(activity!!.applicationContext, data2) rcylr_weather.adapter = Adapter rcylr_weather.layoutManager = LinearLayoutManager(activity!!.applicationContext) currentWeather_rcycl.adapter = Adapter2 currentWeather_rcycl.layoutManager = LinearLayoutManager(activity!!.applicationContext, LinearLayoutManager.HORIZONTAL, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment WeatherFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = WeatherFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onSuccess(authRepo: LiveData) { authRepo.observe(this, Observer { Log.d("Frag", authRepo.value.toString()) }) // Toast.makeText(this.context, "SS", Toast.LENGTH_LONG).show() } } private fun RecyclerView.hasFixedSize(b: Boolean) { } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/yojna/YojnaFragment.kt ================================================ package com.project.farmingapp.view.yojna import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.bumptech.glide.Glide import com.project.farmingapp.R import com.project.farmingapp.viewmodel.YojnaViewModel import kotlinx.android.synthetic.main.fragment_yojna.* import kotlinx.coroutines.GlobalScope // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [YojnaFragment.newInstance] factory method to * create an instance of this fragment. */ class YojnaFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null lateinit var yojnaViewModel: YojnaViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } val tag = this.tag.toString() Log.d("YojnaFragment", this.tag.toString()) yojnaViewModel = ViewModelProviders.of(requireActivity()).get(YojnaViewModel::class.java) yojnaViewModel.getYojna(this.tag.toString()) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_yojna, container, false) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment YojnaFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = YojnaFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Krishi Yojna" progressYojna.visibility = View.VISIBLE yojnaViewModel.msg.observe(viewLifecycleOwner, Observer { yojnaTitle.text = it.get("title").toString() yojnaDesc.text = it.get("description").toString() yojnaDate.text = it.get("launch").toString() yojnaLaunchedBy.text = it.get("headedBy").toString() yojnaBudget.text = it.get("budget").toString() val eligibility: ArrayList = it.get("eligibility") as ArrayList val documents: ArrayList = it.get("documents") as ArrayList val objectives: ArrayList = it.get("objective") as ArrayList yojnaEligibility.text = "" yojnaDocumentsRequired.text = "" yojnaObjectives.text = "" for (i in 0..(eligibility.size - 1)) { yojnaEligibility.text = yojnaEligibility.text.toString() + (i + 1).toString() + ". " + eligibility[i].toString() + "\n" } for (i in 0..(documents.size - 1)) { yojnaDocumentsRequired.text = yojnaDocumentsRequired.text.toString() + (i + 1).toString() + ". " + documents[i].toString() + "\n" } for (i in 0..(objectives.size - 1)) { yojnaObjectives.text = yojnaObjectives.text.toString() + (i + 1).toString() + ". " + objectives[i].toString() + "\n" } yojnaWebsite.text = it.get("website").toString() Glide.with(this).load(it.get("image").toString()).into(yojnaImage) progressYojna.visibility = View.GONE }) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/view/yojna/YojnaListFragment.kt ================================================ package com.project.farmingapp.view.yojna import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Adapter import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.project.farmingapp.R import com.project.farmingapp.adapter.ArticleListAdapter import com.project.farmingapp.adapter.YojnaAdapter import com.project.farmingapp.utilities.CellClickListener import com.project.farmingapp.view.articles.FruitsFragment import com.project.farmingapp.viewmodel.ArticleViewModel import com.project.farmingapp.viewmodel.YojnaViewModel import kotlinx.android.synthetic.main.fragment_yojna_list.* // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" /** * A simple [Fragment] subclass. * Use the [YojnaListFragment.newInstance] factory method to * create an instance of this fragment. */ class YojnaListFragment : Fragment(), CellClickListener { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null private lateinit var viewModel: YojnaViewModel lateinit var Adapter: YojnaAdapter lateinit var yojnaFragment: YojnaFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } viewModel = ViewModelProviders.of(requireActivity()) .get(YojnaViewModel::class.java) viewModel.getAllYojna("yojnas") } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { viewModel.message3.observe(viewLifecycleOwner, Observer { Log.d("Art All Data", it[0].data.toString()) Adapter = YojnaAdapter(activity!!.applicationContext, it, this) rcyclr_yojnaList.adapter = Adapter rcyclr_yojnaList.layoutManager = LinearLayoutManager(activity!!.applicationContext) }) // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_yojna_list, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.title = "Krishi Yojna" } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment YojnaListFragment. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = YojnaListFragment().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onCellClickListener(name: String) { yojnaFragment = YojnaFragment() val bundle = Bundle() bundle.putString("name", name) yojnaFragment.setArguments(bundle) val transaction = activity!!.supportFragmentManager .beginTransaction() .replace(R.id.frame_layout, yojnaFragment, name) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .setReorderingAllowed(true) .addToBackStack("yojnaListFrag") .commit() } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/ArticleListener.kt ================================================ package com.project.farmingapp.viewmodel import androidx.lifecycle.LiveData interface ArticleListener { fun onStarted() fun onSuccess(authRepo: LiveData) fun onFailure(message: String) } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/ArticleViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.android.gms.tasks.OnFailureListener import com.google.android.gms.tasks.OnSuccessListener import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.QuerySnapshot import com.google.firebase.storage.FileDownloadTask import com.google.firebase.storage.FirebaseStorage import java.io.File class ArticleViewModel : ViewModel() { var message1 = MutableLiveData>() var message2 = MutableLiveData() var message3 = MutableLiveData>() var articleListener: ArticleListener? = null private var todoLiveData: LiveData>? = null lateinit var firebaseDb: FirebaseFirestore lateinit var firebaseStorage: FirebaseStorage fun getArticle(): MutableLiveData> { Log.d("ArticleViewModelGet", message1.value.toString()) return message1 } fun getMyArticle(name: String) { firebaseStorage = FirebaseStorage.getInstance() firebaseDb = FirebaseFirestore.getInstance() Log.d("ArticleRepo1", "Ss") firebaseDb.collection("article_fruits").document("${name}") .get() .addOnSuccessListener { message1.value = it.data as HashMap? Log.d("ArticleViewModelDirect", message1.value.toString()) } .addOnFailureListener { Log.d("ArticleRepo3", "ss") } } fun getAllArticles(name: String){ if (message3.value.isNullOrEmpty()){ firebaseDb = FirebaseFirestore.getInstance() firebaseDb.collection(name).get().addOnSuccessListener { // var message3 = MutableLiveData() message3.value = it.documents Log.d("I'm called4", "Yes") // Log.d("All articles", it.documents[1].data.toString()) } } } fun updateArticle(data: HashMap) { Log.d("ArticleViewModel", data.toString()) message1.value = data } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/AuthListener.kt ================================================ package com.project.farmingapp.viewmodel import androidx.lifecycle.LiveData interface AuthListener { fun onStarted() fun onSuccess(authRepo: LiveData) fun onFailure(message: String) } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/AuthViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.content.Intent import android.util.Log import android.view.View import androidx.lifecycle.ViewModel import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.android.gms.common.api.ApiException import com.project.farmingapp.model.AuthRepository class AuthViewModel : ViewModel() { var name: String? = null var mobNo: String? = null var email: String? = null var city: String? = null var password: String? = null var confPassword: String? = null var userType: String? = "normal" var authListener: AuthListener? = null //login var loginmail:String?=null var loginpwd:String?=null lateinit var authRepository: AuthRepository lateinit var googleSignInClient: GoogleSignInClient companion object { private const val TAG = "GoogleActivity" private const val RC_SIGN_IN = 9001 } val userPosts = arrayListOf() fun signupButtonClicked(view: View) { authListener!!.onStarted() if (name.isNullOrEmpty() || mobNo.toString().length != 10 || mobNo == null || password.isNullOrEmpty() || confPassword.isNullOrEmpty() || city.isNullOrEmpty()) { // Failure authListener!!.onFailure("Error Occurred") return } // Success var data = hashMapOf( "name" to name, "mobNo" to mobNo, "email" to email, "city" to city, "userType" to userType, "posts" to userPosts, "profileImage" to "" ) val authRepo = AuthRepository().signInWithEmail(email!!, password!!, data) authListener?.onSuccess(authRepo) } fun returnActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { authListener!!.onStarted() if (requestCode == RC_SIGN_IN) { val task = GoogleSignIn.getSignedInAccountFromIntent(data) val exception = task.exception if (task.isSuccessful) { try { val account = task.getResult(ApiException::class.java)!! var data2 = hashMapOf( "userType" to userType, "posts" to userPosts, "name" to account.displayName.toString(), "profileImage" to account.photoUrl.toString() ) authRepository = AuthRepository() var returned = authRepository.signInToGoogle( account.idToken!!, account.email.toString(), data2 ) Log.d("AuthView", returned.value.toString()) authListener?.onSuccess(returned) } catch (e: ApiException) { authListener!!.onFailure(e.message.toString()) } } else { } } } //login btn function fun loginButtonClicked(view: View) { authListener!!.onStarted() if (loginmail.isNullOrEmpty() || loginpwd.isNullOrEmpty()) { // Failure authListener!!.onFailure("Error Occurred") return } // Success val authRepo = AuthRepository().logInWithEmail(loginmail!!, loginpwd!!) authListener?.onSuccess(authRepo) } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/EcommViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.util.Log import android.widget.Toast import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.recyclerview.widget.LinearLayoutManager import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.StorageReference import com.project.farmingapp.adapter.EcommerceAdapter import kotlinx.android.synthetic.main.fragment_ecommerce.* class EcommViewModel : ViewModel() { private var firebaseAuth: FirebaseAuth? = null private var firebaseFireStore: FirebaseFirestore = FirebaseFirestore.getInstance() private var firebaseStore: FirebaseStorage? = null private var storageReference: StorageReference? = null var ecommLiveData = MutableLiveData>() var specificCategoryItems = MutableLiveData>() var specificItem = MutableLiveData() fun loadAllEcommItems(): MutableLiveData> { firebaseAuth = FirebaseAuth.getInstance() firebaseFireStore = FirebaseFirestore.getInstance() firebaseFireStore!!.collection("products").get() .addOnSuccessListener { Log.d("ecommviewmodel", it.documents[0].getString("title").toString()) ecommLiveData.value = it.documents Log.d("ecommviewmodel", it.documents.toString()) } .addOnFailureListener { Log.d("ecommviewmodel", it.message) } return ecommLiveData } fun loadSpecificTypeEcomItem(itemType: String) { firebaseFireStore = FirebaseFirestore.getInstance() firebaseFireStore!!.collection("products") .whereEqualTo("type", itemType) .get() .addOnSuccessListener { Log.d("ecommviewmodel", it.documents[0].getString("title").toString()) ecommLiveData.value = it.documents Log.d("ecommviewmodel", it.documents.toString()) } .addOnFailureListener { Log.d("ecommviewmodel", it.message) } } fun getSpecificCategoryItems(itemType: String): MutableLiveData> { firebaseFireStore.collection("products") .whereEqualTo("type", itemType) .get() .addOnCompleteListener { if (it.isSuccessful) { specificCategoryItems.value = it.result!!.documents Log.d("EcommViewModel", it.result!!.documents.toString()) } } .addOnFailureListener { Log.e("EcommViewModel", "Error Loading Specific Category Items") } return specificCategoryItems } fun getSpecificItem(itemID: String): MutableLiveData { firebaseFireStore.collection("products") .document(itemID) .get() .addOnCompleteListener { if (it.isSuccessful) { Log.d("EcommViewModel", it.result!!.data.toString()) specificItem.value = it.result } else { Log.e("EcommViewModel", "Failed Getting Data") } }.addOnFailureListener { Log.e("EcommViewModel", "Failed Getting Data") } return specificItem } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/SocialMediaViewModel.kt ================================================ package com.project.farmingapp.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.StorageReference class SocialMediaViewModel: ViewModel() { private var firebaseAuth: FirebaseAuth? = null private var firebaseFireStore: FirebaseFirestore? = null private var firebaseStore: FirebaseStorage? = null private var storageReference: StorageReference? = null var postLiveData = MutableLiveData>() fun loadPosts(){ firebaseAuth = FirebaseAuth.getInstance() firebaseFireStore = FirebaseFirestore.getInstance() firebaseFireStore!!.collection("posts").get() .addOnSuccessListener { // postLiveData.value = it.documents[0].data.get("") } .addOnFailureListener { } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/UserDataViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.content.Context import android.util.Log import android.widget.Toast import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FieldValue import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.R import com.project.farmingapp.view.user.UserFragment import kotlinx.android.synthetic.main.fragment_user.* import kotlinx.android.synthetic.main.nav_header.view.* import kotlinx.coroutines.channels.consumesAll class UserDataViewModel : ViewModel() { var userliveData = MutableLiveData() fun getUserData(userId: String) { val firebaseFireStore = FirebaseFirestore.getInstance() firebaseFireStore.collection("users").document(userId) .get() .addOnCompleteListener { userliveData.value = it.result } } fun updateUserField(context: Context, userID: String, about: String?, city: String?) { if (about !=null) { val firebaseFireStore = FirebaseFirestore.getInstance() firebaseFireStore.collection("users").document("${userID}") .update( mapOf( "about" to about ) ) .addOnSuccessListener { Log.d("UserDataViewModel", "User About Data Updated") getUserData(userID) } .addOnFailureListener { Log.d("UserDataViewModel", "Failed to Update About User Data") Toast.makeText(context, "Failed to Update About. Try Again!", Toast.LENGTH_SHORT).show() } } if (city !=null) { val firebaseFireStore = FirebaseFirestore.getInstance() firebaseFireStore.collection("users").document("${userID}") .update( mapOf( "city" to city ) ) .addOnSuccessListener { Log.d("UserDataViewModel", "User City Data Updated") getUserData(userID) } .addOnFailureListener { Log.d("UserDataViewModel", "Failed to Update City User Data") Toast.makeText(context, "Failed to Update City Try Again!", Toast.LENGTH_SHORT).show() } } Toast.makeText(context, "Profile Updated", Toast.LENGTH_SHORT).show() } fun deleteUserPost(userId: String, postId: String){ val firebaseFirestore = FirebaseFirestore.getInstance() firebaseFirestore.collection("posts").document(postId) .delete() .addOnSuccessListener { Log.d("User Data View Model", "Post Deleted") UserProfilePostsViewModel().getAllPosts(userId) firebaseFirestore.collection("users").document(userId).update("posts", FieldValue.arrayRemove("${postId}")) .addOnSuccessListener { Log.d("UserDataViewModel", "Successfully Deleted User Doc Post") getUserData(userId) } .addOnFailureListener{ Log.e("UserDataViewModel", "Failed to delete post from User Doc") } } .addOnFailureListener { Log.d("User Data View Model", "Failed to delete post") } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/UserProfilePostsViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.project.farmingapp.model.data.Post lateinit var userProfilePostsLiveData : MutableLiveData> class UserProfilePostsViewModel : ViewModel() { val userProfilePostsLiveData = MutableLiveData>>() val userProfilePostsLiveData2 = MutableLiveData>() val liveData1 = MutableLiveData>() val liveData2 = MutableLiveData>() val liveData3 = MutableLiveData>() fun getUserPosts(userID: String?) { val firebaseFirestore = FirebaseFirestore.getInstance() val firebaseFirestore2 = FirebaseFirestore.getInstance() firebaseFirestore.collection("users").document("${userID}") .get() .addOnSuccessListener { val allPostsIDs: List? = it.get("posts") as List userProfilePostsLiveData2.value = allPostsIDs Log.d("User All Posts 3", userProfilePostsLiveData2.value.toString()) var localPostList : ArrayList>?= null for (i in allPostsIDs!!) { firebaseFirestore2.collection("posts").document(i) .get() .addOnSuccessListener { Log.d("User All Posts", it.data.toString()) // localPostList?.add(it) // var localData = it.data val someData = it.data as HashMap localPostList?.add(someData) if(localPostList!=null){ Log.d("User All Posts 2", localPostList.toString()) } Log.d("User All Posts 4", localPostList?.size.toString()) userProfilePostsLiveData.value?.add(it.data as HashMap) } .addOnFailureListener { Log.d("User All Posts", "Some Failure Occured while fetching user posts") } } // Log.d("User All Posts 2", localPostList.toString()) }.addOnFailureListener { Log.d("User All Posts 2", "Some Failure Occured while fetching user posts") } } fun getUserPostsIDs(userID: String?){ val firebaseFirestore = FirebaseFirestore.getInstance() firebaseFirestore.collection("users").document(userID!!) .get() .addOnSuccessListener { liveData1.value = it.get("posts") as List } } fun getAllPostsOfUser(listOfIDs : List){ val firebaseFirestore = FirebaseFirestore.getInstance() var someList = ArrayList() var i = 0 var j = listOfIDs.size for (i in 0..j-1){ firebaseFirestore.collection("posts").document(listOfIDs[i]) .get() .addOnSuccessListener { someList.add(it) Log.d("LiveData2 - 2", it.toString()) Log.d("LiveData2 - 2", someList.toString()) // liveData2.value?.add(it!!) } } if (i == j){ liveData2.value = someList Log.d("LiveData2 - 1", liveData2.value.toString()) } // if(!someList.isNullOrEmpty()){ //// liveData2.value = someList // Log.d("LiveData2", someList.toString()) // // } } fun getAllPosts(userId: String?){ val firebaseFirestore = FirebaseFirestore.getInstance() firebaseFirestore.collection("posts").whereEqualTo("userID", userId) .get() .addOnSuccessListener { liveData3.value = it.documents as ArrayList Log.d("UserPrlPostsViewModel", "Updated data") } .addOnFailureListener { Log.d("Error", "Error in all docs") } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/WeatherListener.kt ================================================ package com.project.farmingapp.viewmodel import androidx.lifecycle.LiveData interface WeatherListener { fun onSuccess(authRepo: LiveData) } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/WeatherViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.firebase.firestore.DocumentSnapshot import com.project.farmingapp.adapter.WeatherAdapter import com.project.farmingapp.model.WeatherApi import com.project.farmingapp.model.WeatherRepository import com.project.farmingapp.model.data.Weather import com.project.farmingapp.model.data.WeatherRootList import retrofit2.Call import retrofit2.Callback import retrofit2.Response import kotlin.coroutines.coroutineContext class WeatherViewModel : ViewModel() { lateinit var Adapter: WeatherAdapter lateinit var rootData: MutableLiveData var weatherListener: WeatherListener? = null private var message1 = MutableLiveData() private var message2 = MutableLiveData() private var coordinates = MutableLiveData>() val _rootData1 = MutableLiveData() val rootData2: LiveData = _rootData1 var newDataTrial = MutableLiveData() fun messageToB(msg: WeatherRootList){ message2.value = msg } fun messageToA(msg: WeatherRootList){ message1.value = msg } fun getMessageA(): MutableLiveData { return message1 } fun getMessageB(): MutableLiveData{ return message2 } fun callWeatherRepository() { val response = WeatherRepository().getWeather() // val ss = response.value!!.list[0].dt_txt // Log.d("ViewModel", ss) weatherListener?.onSuccess(response) } fun updateCoordinates(coords: List){ coordinates.value = coords Log.d("WeatherView", coordinates.value.toString()) } fun getCoordinates(): MutableLiveData> { return coordinates } fun updateNewData(){ val response: Call = WeatherApi.weatherInstances.getWeather("${coordinates.value?.get(0)}", "${coordinates.value?.get(1)}") Log.d("New Weather Updated", "Yes") Log.d("Weather Lat", "${coordinates.value?.get(0)}") Log.d("Weather Long", "${coordinates.value?.get(1)}") Log.d("Weather City", "${coordinates.value?.get(2)}") if (newDataTrial.value == null) { response.enqueue(object : Callback { override fun onFailure(call: Call, t: Throwable) { Log.d("WeatherRepository", "Error Occured") } override fun onResponse( call: Call, response: Response ) { if (response.isSuccessful) { newDataTrial.value = response.body() } } } ) } } } ================================================ FILE: app/src/main/java/com/project/farmingapp/viewmodel/YojnaViewModel.kt ================================================ package com.project.farmingapp.viewmodel import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.storage.FirebaseStorage class YojnaViewModel: ViewModel() { lateinit var firebaseDb: FirebaseFirestore lateinit var firebaseStorage: FirebaseStorage var msg = MutableLiveData>() var message3 = MutableLiveData>() fun getYojna(name: String) { firebaseStorage = FirebaseStorage.getInstance() firebaseDb = FirebaseFirestore.getInstance() firebaseDb.collection("yojnas").document("${name}") .get() .addOnSuccessListener { msg.value = it.data as HashMap? Log.d("YojnaViewModel", msg.value.toString()) } .addOnFailureListener { Log.d("YojnaViewModel", "ss") } } fun getAllYojna(name: String){ if (message3.value.isNullOrEmpty()){ firebaseDb = FirebaseFirestore.getInstance() firebaseDb.collection(name).get().addOnSuccessListener { // var message3 = MutableLiveData() message3.value = it.documents Log.d("I'm called4", "Yes") // Log.d("All articles", it.documents[1].data.toString()) } } } fun updateArticle(data: HashMap) { Log.d("ArticleViewModel", data.toString()) msg.value = data } } ================================================ FILE: app/src/main/res/anim/fade_scale.xml ================================================ ================================================ FILE: app/src/main/res/anim/fade_transition.xml ================================================ ================================================ FILE: app/src/main/res/anim/fade_transition_opposite.xml ================================================ ================================================ FILE: app/src/main/res/color/chip_bg_states.xml ================================================ ================================================ FILE: app/src/main/res/drawable/add_icon.xml ================================================ ================================================ FILE: app/src/main/res/drawable/all_buttons.xml ================================================ ================================================ FILE: app/src/main/res/drawable/apmc_card_bg.xml ================================================ ================================================ FILE: app/src/main/res/drawable/chip_back.xml ================================================ ================================================ FILE: app/src/main/res/drawable/dash_home.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ecommbackground.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ecommborder.xml ================================================ ================================================ FILE: app/src/main/res/drawable/edit_back.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic__keyboard_arrow_down.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_check_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_delete_forever_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_edit_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_local_shipping_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_photo_camera_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_baseline_trending_up_24.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_high_temp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_humidity.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_launcher_background.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_low_temp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_user_profile.xml ================================================ ================================================ FILE: app/src/main/res/drawable/indicator_active.xml ================================================ ================================================ FILE: app/src/main/res/drawable/indicator_inactive.xml ================================================ ================================================ FILE: app/src/main/res/drawable/minus_icon.xml ================================================ ================================================ FILE: app/src/main/res/drawable/post_border.xml ================================================ ================================================ FILE: app/src/main/res/drawable/post_logo.xml ================================================ ================================================ FILE: app/src/main/res/drawable/progress_background.xml ================================================ ================================================ FILE: app/src/main/res/drawable/round_borderless_general.xml ================================================ ================================================ FILE: app/src/main/res/drawable/rounder_border_general.xml ================================================ ================================================ FILE: app/src/main/res/drawable/table_border.xml ================================================ ================================================ FILE: app/src/main/res/drawable/table_leftbottom_border.xml ================================================ ================================================ FILE: app/src/main/res/drawable/table_lefttop_border.xml ================================================ ================================================ FILE: app/src/main/res/drawable/table_rightbottom_border.xml ================================================ ================================================ FILE: app/src/main/res/drawable/table_righttop_border.xml ================================================ ================================================ FILE: app/src/main/res/drawable/weather_rcyclr_bg.xml ================================================ ================================================ FILE: app/src/main/res/drawable-v24/ic_launcher_foreground.xml ================================================ ================================================ FILE: app/src/main/res/font/lato.xml ================================================ ================================================ FILE: app/src/main/res/font/lato_bold.xml ================================================ ================================================ FILE: app/src/main/res/font/lato_light.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_dashboard.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_intro.xml ================================================