Full Code of hetsuthar028/Farming-App for AI

master 53cf61fe4158 cached
194 files
582.6 KB
138.0k tokens
1 requests
Download .txt
Showing preview only (641K chars total). Download the full file or copy to clipboard to get everything.
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
================================================
<component name="ProjectCodeStyleConfiguration">
  <code_scheme name="Project" version="173">
    <JetCodeStyleSettings>
      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
    </JetCodeStyleSettings>
    <codeStyleSettings language="XML">
      <indentOptions>
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
      </indentOptions>
      <arrangement>
        <rules>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>xmlns:android</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>^$</XML_NAMESPACE>
                </AND>
              </match>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>xmlns:.*</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>^$</XML_NAMESPACE>
                </AND>
              </match>
              <order>BY_NAME</order>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>.*:id</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                </AND>
              </match>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>.*:name</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                </AND>
              </match>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>name</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>^$</XML_NAMESPACE>
                </AND>
              </match>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>style</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>^$</XML_NAMESPACE>
                </AND>
              </match>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>.*</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>^$</XML_NAMESPACE>
                </AND>
              </match>
              <order>BY_NAME</order>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>.*</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                </AND>
              </match>
              <order>ANDROID_ATTRIBUTE_ORDER</order>
            </rule>
          </section>
          <section>
            <rule>
              <match>
                <AND>
                  <NAME>.*</NAME>
                  <XML_ATTRIBUTE />
                  <XML_NAMESPACE>.*</XML_NAMESPACE>
                </AND>
              </match>
              <order>BY_NAME</order>
            </rule>
          </section>
        </rules>
      </arrangement>
    </codeStyleSettings>
    <codeStyleSettings language="kotlin">
      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
    </codeStyleSettings>
  </code_scheme>
</component>

================================================
FILE: .idea/codeStyles/codeStyleConfig.xml
================================================
<component name="ProjectCodeStyleConfiguration">
  <state>
    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
  </state>
</component>

================================================
FILE: .idea/compiler.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <bytecodeTargetLevel target="1.8" />
  </component>
</project>

================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleMigrationSettings" migrationVersion="1" />
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="testRunner" value="PLATFORM" />
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="gradleJvm" value="1.8" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/app" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

================================================
FILE: .idea/jarRepositories.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RemoteRepositoriesConfiguration">
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Maven Central repository" />
      <option name="url" value="https://repo1.maven.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="jboss.community" />
      <option name="name" value="JBoss Community repository" />
      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="BintrayJCenter" />
      <option name="name" value="BintrayJCenter" />
      <option name="url" value="https://jcenter.bintray.com/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="Google" />
      <option name="name" value="Google" />
      <option name="url" value="https://dl.google.com/dl/android/maven2/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="maven" />
      <option name="name" value="maven" />
      <option name="url" value="https://jitpack.io" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="MavenRepo" />
      <option name="name" value="MavenRepo" />
      <option name="url" value="https://repo.maven.apache.org/maven2/" />
    </remote-repository>
  </component>
</project>

================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
    <option name="id" value="Android" />
  </component>
</project>

================================================
FILE: .idea/render.experimental.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RenderSettings">
    <option name="showDecorations" value="true" />
  </component>
</project>

================================================
FILE: .idea/runConfigurations.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RunConfigurationProducerService">
    <option name="ignoredProducers">
      <set>
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
      </set>
    </option>
  </component>
</project>

================================================
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
<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\r\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\r\n  </component>\r\n  <component name=\"ProjectType\">\r\n    <option name=\"id\" value=\"Android\" />\r\n  </component>\r\n</project>
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- .idea/misc.xml	(revision 10b3406bcaf78db23f771ddbc45bfbe5986f0031)
+++ .idea/misc.xml	(date 1611590755469)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">


================================================
FILE: .idea/shelf/Uncommitted_changes_before_Checkout_at_25-01-2021_21_36__Default_Changelist_.xml
================================================
<changelist name="Uncommitted_changes_before_Checkout_at_25-01-2021_21_36_[Default_Changelist]" date="1611590792291" recycled="false" toDelete="true">
  <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Checkout_at_25-01-2021_21_36_[Default_Changelist]/shelved.patch" />
  <option name="DESCRIPTION" value="Uncommitted changes before Checkout at 25-01-2021 21:36 [Default Changelist]" />
</changelist>

================================================
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
<+><?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    package=\"com.project.farmingapp\">\r\n\r\n    <uses-permission android:name=\"android.permission.INTERNET\" />\r\n\r\n    <application\r\n        android:allowBackup=\"true\"\r\n        android:icon=\"@mipmap/ic_launcher\"\r\n        android:label=\"@string/app_name\"\r\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\r\n        android:supportsRtl=\"true\"\r\n        android:theme=\"@style/AppTheme\">\r\n        <activity android:name=\".view.auth.SignupActivity\"><intent-filter>\r\n            <action android:name=\"android.intent.action.MAIN\" />\r\n\r\n            <category android:name=\"android.intent.category.LAUNCHER\" />\r\n        </intent-filter></activity>\r\n        <activity android:name=\".view.auth.LoginActivity\">\r\n\r\n        </activity>\r\n    </application>\r\n\r\n</manifest>
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">
-        <activity android:name=".view.auth.SignupActivity"><intent-filter>
-            <action android:name="android.intent.action.MAIN" />
+        <activity android:name=".view.auth.SignupActivity">
+
+        </activity>
+        <activity android:name=".view.auth.LoginActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
 
-            <category android:name="android.intent.category.LAUNCHER" />
-        </intent-filter></activity>
-        <activity android:name=".view.auth.LoginActivity">
-
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
         </activity>
     </application>
 
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<String>) {
+        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<String, String?>): LiveData<String> {\r\n\r\n        firebaseDb = FirebaseFirestore.getInstance()\r\n        val data = MutableLiveData<String>()\r\n        val data2 = MutableLiveData<String>()\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<String> {
+
+        firebaseDb = FirebaseFirestore.getInstance()
+        val data = MutableLiveData<String>()
+        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
<+><?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\r\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\r\n    xmlns:tools=\"http://schemas.android.com/tools\">\r\n    <data>\r\n        <variable\r\n            name=\"authViewModel\"\r\n            type=\"com.project.farmingapp.viewmodel.AuthViewModel\" />\r\n    </data>\r\n\r\n    <ScrollView\r\n        android:layout_width=\"match_parent\"\r\n        android:fillViewport=\"true\"\r\n        android:layout_height=\"match_parent\">\r\n\r\n        <androidx.constraintlayout.widget.ConstraintLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n\r\n            android:background=\"@drawable/authback\"\r\n            tools:context=\".view.auth.LoginActivity\">\r\n\r\n\r\n            <TextView\r\n                android:id=\"@+id/titleTextLogin\"\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:text=\"Farming App\"\r\n                android:textColor=\"#fff\"\r\n                android:textSize=\"30sp\"\r\n                android:textStyle=\"bold\"\r\n                app:layout_constraintBottom_toTopOf=\"@id/title2TextLogin\"\r\n                app:layout_constraintEnd_toEndOf=\"parent\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toTopOf=\"parent\"\r\n                />\r\n\r\n            <TextView\r\n                android:id=\"@+id/title2TextLogin\"\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:text=\"Login\"\r\n                android:textSize=\"17sp\"\r\n                android:textColor=\"#fff\"\r\n                app:layout_constraintBottom_toTopOf=\"@id/guide2\"\r\n                app:layout_constraintEnd_toEndOf=\"parent\"\r\n                app:layout_constraintHorizontal_bias=\"0.5\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@id/titleTextLogin\" />\r\n\r\n            <androidx.constraintlayout.widget.Guideline\r\n                android:id=\"@+id/guide2\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:orientation=\"horizontal\"\r\n                app:layout_constraintGuide_percent=\"0.15\" />\r\n\r\n            <com.google.android.material.textfield.TextInputLayout\r\n                android:id=\"@+id/emailContLogin\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginHorizontal=\"30dp\"\r\n                android:layout_marginTop=\"120dp\"\r\n                android:textColorHint=\"#60AA39\"\r\n                app:layout_constraintBottom_toTopOf=\"@id/passwordContLogin\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@id/guide2\"\r\n                app:layout_constraintVertical_bias=\"0.0\">\r\n\r\n                <com.google.android.material.textfield.TextInputEditText\r\n                    android:id=\"@+id/emailEditLogin\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:backgroundTint=\"#0060AA39\"\r\n                    android:hint=\"Email\"\r\n                    android:textColor=\"#fff\"\r\n                    android:textStyle=\"bold\" />\r\n            </com.google.android.material.textfield.TextInputLayout>\r\n\r\n            <com.google.android.material.textfield.TextInputLayout\r\n                android:id=\"@+id/passwordContLogin\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginHorizontal=\"30dp\"\r\n                android:textColorHint=\"#60AA39\"\r\n                app:counterEnabled=\"false\"\r\n                app:counterMaxLength=\"10\"\r\n                app:passwordToggleTint=\"#fff\"\r\n                app:layout_constraintBottom_toTopOf=\"@id/loginBtnLogin\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@id/emailContLogin\">\r\n\r\n                <com.google.android.material.textfield.TextInputEditText\r\n                    android:id=\"@+id/passwordEditLogin\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:backgroundTint=\"#0060AA39\"\r\n                    android:hint=\"Password\"\r\n                    android:inputType=\"phone\"\r\n                    android:textColor=\"#fff\"\r\n                    android:textStyle=\"bold\" />\r\n            </com.google.android.material.textfield.TextInputLayout>\r\n\r\n\r\n            <com.google.android.material.button.MaterialButton\r\n                android:id=\"@+id/loginBtnLogin\"\r\n                android:layout_width=\"100dp\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"30dp\"\r\n\r\n                android:background=\"@drawable/all_buttons\"\r\n                android:padding=\"15sp\"\r\n                android:text=\"Login\"\r\n                android:textAlignment=\"center\"\r\n                android:textAllCaps=\"false\"\r\n                android:textColor=\"#fff\"\r\n                android:textStyle=\"bold\"\r\n                app:layout_constraintBottom_toTopOf=\"@id/orTextLogin\"\r\n                app:layout_constraintEnd_toEndOf=\"parent\"\r\n                app:layout_constraintHorizontal_bias=\"0.498\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@id/passwordContLogin\" />\r\n\r\n            <TextView\r\n                android:id=\"@+id/orTextLogin\"\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"10dp\"\r\n                android:text=\"OR\"\r\n                android:textColor=\"#fff\"\r\n                android:textStyle=\"bold\"\r\n                app:layout_constraintEnd_toEndOf=\"parent\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@+id/loginBtnLogin\" />\r\n\r\n            <com.google.android.gms.common.SignInButton\r\n                android:id=\"@+id/signGoogleBtnLogin\"\r\n                android:layout_width=\"130dp\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"10dp\"\r\n                app:layout_constraintEnd_toEndOf=\"parent\"\r\n                app:layout_constraintHorizontal_bias=\"0.498\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@id/orTextLogin\"\r\n                app:layout_constraintVertical_bias=\"0.0\" />\r\n\r\n            <TextView\r\n                android:id=\"@+id/createaccountText\"\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:text=\"Don't have an account? Create account\"\r\n                android:textColor=\"#fff\"\r\n                android:textSize=\"15sp\"\r\n                android:textStyle=\"bold\"\r\n                app:layout_constraintBottom_toBottomOf=\"parent\"\r\n                app:layout_constraintEnd_toEndOf=\"parent\"\r\n                app:layout_constraintStart_toStartOf=\"parent\"\r\n                app:layout_constraintTop_toBottomOf=\"@+id/signGoogleBtnLogin\" />\r\n          \" />\r\n\r\n        </androidx.constraintlayout.widget.ConstraintLayout>\r\n    </ScrollView>\r\n</layout>\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">
 
                 <com.google.android.material.textfield.TextInputEditText
+                    android:text="@={authViewModel.loginmail}"
                     android:id="@+id/emailEditLogin"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -92,6 +93,7 @@
                 app:layout_constraintTop_toBottomOf="@id/emailContLogin">
 
                 <com.google.android.material.textfield.TextInputEditText
+                    android:text="@={authViewModel.loginpwd}"
                     android:id="@+id/passwordEditLogin"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -102,8 +104,18 @@
                     android:textStyle="bold" />
             </com.google.android.material.textfield.TextInputLayout>
 
-
+            <ProgressBar
+                android:id="@+id/progressLogin"
+                android:visibility="invisible"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="0.5"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
             <com.google.android.material.button.MaterialButton
+                android:onClick="@{authViewModel::loginButtonClicked}"
                 android:id="@+id/loginBtnLogin"
                 android:layout_width="100dp"
                 android:layout_height="wrap_content"
Index: .idea/jarRepositories.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"RemoteRepositoriesConfiguration\">\r\n    <remote-repository>\r\n      <option name=\"id\" value=\"central\" />\r\n      <option name=\"name\" value=\"Maven Central repository\" />\r\n      <option name=\"url\" value=\"https://repo1.maven.org/maven2\" />\r\n    </remote-repository>\r\n    <remote-repository>\r\n      <option name=\"id\" value=\"jboss.community\" />\r\n      <option name=\"name\" value=\"JBoss Community repository\" />\r\n      <option name=\"url\" value=\"https://repository.jboss.org/nexus/content/repositories/public/\" />\r\n    </remote-repository>\r\n    <remote-repository>\r\n      <option name=\"id\" value=\"BintrayJCenter\" />\r\n      <option name=\"name\" value=\"BintrayJCenter\" />\r\n      <option name=\"url\" value=\"https://jcenter.bintray.com/\" />\r\n    </remote-repository>\r\n    <remote-repository>\r\n      <option name=\"id\" value=\"Google\" />\r\n      <option name=\"name\" value=\"Google\" />\r\n      <option name=\"url\" value=\"https://dl.google.com/dl/android/maven2/\" />\r\n    </remote-repository>\r\n  </component>\r\n</project>
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- .idea/jarRepositories.xml	(revision d0dcb8b4662cad8592336090eac9f8e56ae7147e)
+++ .idea/jarRepositories.xml	(date 1609303744590)
@@ -21,5 +21,10 @@
       <option name="name" value="Google" />
       <option name="url" value="https://dl.google.com/dl/android/maven2/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven" />
+      <option name="name" value="maven" />
+      <option name="url" value="https://jitpack.io" />
+    </remote-repository>
   </component>
 </project>
\ No newline at end of file
Index: .idea/gradle.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"GradleMigrationSettings\" migrationVersion=\"1\" />\r\n  <component name=\"GradleSettings\">\r\n    <option name=\"linkedExternalProjectsSettings\">\r\n      <GradleProjectSettings>\r\n        <option name=\"testRunner\" value=\"PLATFORM\" />\r\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\r\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\r\n        <option name=\"gradleJvm\" value=\"1.8\" />\r\n        <option name=\"modules\">\r\n          <set>\r\n            <option value=\"$PROJECT_DIR$\" />\r\n            <option value=\"$PROJECT_DIR$/app\" />\r\n          </set>\r\n        </option>\r\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\r\n      </GradleProjectSettings>\r\n    </option>\r\n  </component>\r\n</project>
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- .idea/gradle.xml	(revision d0dcb8b4662cad8592336090eac9f8e56ae7147e)
+++ .idea/gradle.xml	(date 1609303744597)
@@ -15,6 +15,7 @@
           </set>
         </option>
         <option name="resolveModulePerSourceSet" value="false" />
+        <option name="useQualifiedModuleNames" value="true" />
       </GradleProjectSettings>
     </option>
   </component>
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
<+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project version=\"4\">\r\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" default=\"true\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\r\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\r\n  </component>\r\n  <component name=\"ProjectType\">\r\n    <option name=\"id\" value=\"Android\" />\r\n  </component>\r\n</project>
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- .idea/misc.xml	(revision d0dcb8b4662cad8592336090eac9f8e56ae7147e)
+++ .idea/misc.xml	(date 1609303801213)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
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
================================================
<changelist name="Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]" date="1609345750373" recycled="false" toDelete="true">
  <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]/shelved.patch" />
  <option name="DESCRIPTION" value="Uncommitted changes before Update at 30-12-2020 21:59 [Default Changelist]" />
</changelist>

================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
  </component>
</project>

================================================
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.
<br /><br />


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

## 📱 Technologies / Tools used for building this app includes:
| Android Studio | Firebase | Kotlin | External APIs | Android OS |
| --- | --- | --- | --- | --- |


## 🤩 Designs:
<img src="https://github.com/hetsuthar028/Farming-App/blob/master/Agri India.png" />

## 😀 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
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.project.farmingapp">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
    <uses-feature android:name="android.hardware.location.gps" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".view.introscreen.IntroActivity"
            android:theme="@style/AppTheme2">

        </activity>
        <activity android:name=".view.ecommerce.RazorPayActivity" />
        <activity android:name=".view.dashboard.DashboardActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".view.auth.SignupActivity"
            android:noHistory="true"
            android:theme="@style/AppTheme2" />
        <activity
            android:name=".view.auth.LoginActivity"
            android:noHistory="true"
            android:theme="@style/AppTheme2">

        </activity>

        <meta-data
            android:name="com.razorpay.ApiKey"
            android:value="@string/key_id" />
        <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" />
    </application>

</manifest>

================================================
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<APMCCustomRecords>) :
    RecyclerView.Adapter<ApmcAdapter.ApmcViewHolder>() {
    class ApmcViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        var market = itemView.findViewById<TextView>(R.id.apmcNameValue)
        var location = itemView.findViewById<TextView>(R.id.apmcLocationValue)
        var commodity = itemView.findViewById<TextView>(R.id.comodityname)
        var min = itemView.findViewById<TextView>(R.id.minvalue)
        var max = itemView.findViewById<TextView>(R.id.maxvalue)
//        var modal=itemView.findViewById<TextView>(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<DocumentSnapshot>, private val cellClickListener: CellClickListener): RecyclerView.Adapter<ArticleListAdapter.ArticleListViewholder>() {
    class ArticleListViewholder(itemView: View): RecyclerView.ViewHolder(itemView){
        var articleName = itemView.findViewById<TextView>(R.id.descTextxArticleListFrag)
        var articleImage = itemView.findViewById<ImageView>(R.id.imageArticleListFrag)
        var articleCard = itemView.findViewById<CardView>(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<String> = singleArticle.data!!.get("images") as List<String>

        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<Map<String, Any>>): RecyclerView.Adapter<AttributesNormalAdapter.AttributesNormalViewHolder>() {
    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<Map<String, Any>>, private val cellClickListener: CellClickListener): RecyclerView.Adapter<AttributesSelectionAdapter.AttributesSelectionViewHolder>() {
    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<String, Any>


        for ((key, values) in currentData){

            cellClickListener.onCellClickListener("1 ${key}")

            holder.itemView.attributeTitle.text = key
            var allValues = values as ArrayList<String>
            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<String, Object>,
    val cartitembuy: CartItemBuy
) :
    RecyclerView.Adapter<CartItemsAdapter.CartItemsViewHolder>() {
    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<String>
            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<String, Object>

        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<String>
            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<WeatherList>):
    RecyclerView.Adapter<CurrentWeatherAdapter.CurrentWeatherViewHolder>() {
    class CurrentWeatherViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        var Ctemp=itemView.findViewById<TextView>(R.id.temp)
        var Cwedesc=itemView.findViewById<TextView>(R.id.desc)
        var Cwelogo=itemView.findViewById<ImageView>(R.id.icon)
        var CminTemp=itemView.findViewById<TextView>(R.id.minTemp)
        var CmaxTemp=itemView.findViewById<TextView>(R.id.maxTemp)
        var Chumidity=itemView.findViewById<TextView>(R.id.humidity)
        var CtodayTitle=itemView.findViewById<TextView>(R.id.todayTitle)
        var continer = itemView.findViewById<ConstraintLayout>(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<DocumentSnapshot>, val itemsToShow: List<Int>, val cellClickListener: CellClickListener): RecyclerView.Adapter<DashboardEcomItemAdapter.DashboardEcomItemViewHolder>() {
    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<String>
        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<DocumentSnapshot>, private val cellClickListener: CellClickListener):RecyclerView.Adapter<EcommerceAdapter.EcommercceViewModel>() {

    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<String>
        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<IntroData>): RecyclerView.Adapter<IntroAdapter.IntroViewHolder>() {
    inner class IntroViewHolder(view: View) : RecyclerView.ViewHolder(view){

        private val textTitle = view.findViewById<TextView>(R.id.sliderTitle)
        private val textDescription = view.findViewById<TextView>(R.id.sliderDescription)
        private val imageIcon = view.findViewById<ImageView>(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<String, Object>,
    val cellClickListener: CellClickListener,
    val cartItemBuy: CartItemBuy
) : RecyclerView.Adapter<MyOrdersAdapter.MyOrdersViewHolder>() {
    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<String, Object>
        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<String>
                Glide.with(context).load(allImages[0]).into(holder.itemView.myOderItemImage)
                val date = myOrder.get("time").toString().split(" ") as List<String>
                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<DocumentSnapshot>, private val cellClickListener: CellClickListener) : RecyclerView.Adapter<PostListUserProfileAdapter.PostListUserProfileViewHolder>() {
    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<DocumentSnapshot>): RecyclerView.Adapter<SMPostListAdapter.SMPostListViewModel>() {

    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<WeatherList>) :
    RecyclerView.Adapter<WeatherAdapter.WeatherViewHolder>() {
    class WeatherViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var wedate = itemView.findViewById<TextView>(R.id.weatherDate)
        var wedesc = itemView.findViewById<TextView>(R.id.weatherDescription)
        var wemain = itemView.findViewById<TextView>(R.id.weatherTemperature)
        var welogo = itemView.findViewById<ImageView>(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<DocumentSnapshot>, private val cellClickListener: CellClickListener): RecyclerView.Adapter<YojnaAdapter.YojnaListviewHolder>() {
    class YojnaListviewHolder(itemview: View):RecyclerView.ViewHolder(itemview) {
        var yojnaName = itemView.findViewById<TextView>(R.id.yojnaTitleYojnaList)
        var yojnaImage = itemView.findViewById<ImageView>(R.id.yojnaImageYojnaList)
        var yojnaDate = itemView.findViewById<TextView>(R.id.yojnaDateYojnaList)
        var yojnaCard = itemView.findViewById<CardView>(R.id.singlelistyojnacard)
        var yojnaStatus = itemView.findViewById<TextView>(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<APMCMain>
    @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<APMCMain>

}
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<HashMap<String, Any>>()
    val data2 = MutableLiveData<String>()
    private lateinit var viewModel: ArticleViewModel
    fun getSpecificFruitArticle(name: String): LiveData<String> {

        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<String, Any>?
                viewModel.updateArticle(it.data as HashMap<String, Any>)


//                data.value = it.data as HashMap<String, Any>?
                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<String>()
    fun signInWithEmail(
        email: String,
        password: String,
        otherData: HashMap<String, Serializable?>
    ): LiveData<String> {

        firebaseDb = FirebaseFirestore.getInstance()

        val data2 = MutableLiveData<String>()
        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<String, Serializable?>
    ): LiveData<String> {
        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<String> {

        firebaseDb = FirebaseFirestore.getInstance()

        val data = MutableLiveData<String>()
        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<WeatherRootList>
}

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<WeatherRootList>()

    fun getWeather(): LiveData<String> {
        val response: Call<WeatherRootList> =
            WeatherApi.weatherInstances.getWeather("23.0225", "72.5714")

        val weathRes = MutableLiveData<String>()

        response.enqueue(object : Callback<WeatherRootList> {
            override fun onFailure(call: Call<WeatherRootList>, t: Throwable) {
                Log.d("WeatherRepository", "Error Occured")
            }

            override fun onResponse(
                call: Call<WeatherRootList>,
                response: Response<WeatherRootList>
            ) {
                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<String>,val min_price:MutableList<String>,val max_price:MutableList<String>)

================================================
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<APMCRecords>)

================================================
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<Weather>,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<WeatherList>) : List<WeatherList>
data class WeatherRootList(val list: List<WeatherList>)

================================================
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<Any, Array<String>>? = null
    var states: Array<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

//        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<String> = 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<String> = 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<String> = 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<String> = 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<String> = 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<String> = arrayOf(
            "None",
            "Alappuzha",
            "Ernakulam",
            "Idukki",
            "Kannur",
            "Kasaragod",
            "Kollam",
            "Kottayam",
            "Kozhikode",
            "Malappuram",
            "Palakkad",
            "Pathanamthitta",
            "Thiruvananthapuram",
            "Thrissur",
            "Wayanad"
        )

        var districtInAndhraPradesh: Array<String> = arrayOf(
            "None",
            "Anantapur",
            "Chittoor",
            "East Godavari",
            "Guntur",
            "Krishna",
            "Kurnool",
            "Prakasam",
            "Srikakulam",
            "Sri Potti Sriramulu Nellore",
            "Visakhapatnam",
            "Vizianagaram",
            "West Godavari",
            "Kadapa"
        )

        var emptyDistricts : Array<String> = 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<APMCMain> = APMCApi.apmcInstances.getapmc(20)
        var apmc2: Call<APMCMain>? = null
        if (indexSpinner2 != 0) {

            apmc2 = APMCApi.apmcInstances.getSomeData(district)
            Log.d("APMC District", district)

            apmc2!!.enqueue(object : Callback<APMCMain> {
                override fun onFailure(call: Call<APMCMain>, t: Throwable) {
                    Log.d("bharat222", "fail ho gya", t)
                    progress_apmc.visibility = View.GONE
                    loadingTextAPMC.visibility = View.GONE
                }

                override fun onResponse(
                    call: Call<APMCMain>,
                    response: Response<APMCMain>
                ) {

                    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<APMCCustomRecords>()

                            val list1 = mutableListOf<String>()
                            val list2 = mutableListOf<String>()
                            val list3 = mutableListOf<String>()
                            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>(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>(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<String, String> = it.get("attributes") as Map<String, String>
            val desc = it.get("description").toString()

            Log.d("I'm Called", "Yes")
            val diseases: List<String> = it.get("diseases") as List<String>

            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<String> = it.get("images") as List<String>
            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<String, String> =
                    data!!.get("attributes") as Map<String, String>
                val desc = data!!.get("description").toString()
                val diseases: List<String> = data!!.get("diseases") as List<String>

                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<String> = data!!.get("images") as List<String>
                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<String>) {
        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<String>) {
        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<String>) {
        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>(WeatherViewModel::class.java)

        viewModel2 = ViewModelProviders.of(this)
            .get<UserProfilePostsViewModel>(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<String>
            val city = it.get("city")
            userName = it.get("name").toString()

//            val allPosts = viewModel2.liveData3.value as ArrayList<DocumentSnapshot>

            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<String>()
            val geocoder = Geocoder(this, Locale.getDefault())
            val addresses: List<Address> = 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<String>, 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>(WeatherViewModel::class.java)

        viewModel2 = ViewModelProviders.of(requireActivity())
            .get<EcommViewModel>(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<Int>
            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>(WeatherViewModel::class.java)

        viewModel.getMessageA()
            .observe(viewLifecycleOwner, object : Observer<WeatherRootList?> {
                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<String, Object>()
    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<String, Object>

                    var totalCartPrice = 0
       
Download .txt
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
Condensed preview — 194 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (641K chars).
[
  {
    "path": ".gitignore",
    "chars": 208,
    "preview": "*.iml\n.gradle\n/local.properties\n/.idea/caches\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n/.idea/navEditor."
  },
  {
    "path": ".idea/.name",
    "chars": 11,
    "preview": "Farming App"
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "chars": 3567,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <JetCodeStyleSettings>"
  },
  {
    "path": ".idea/codeStyles/codeStyleConfig.xml",
    "chars": 142,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <state>\n    <option name=\"USE_PER_PROJECT_SETTINGS\" value=\"true\" />\n "
  },
  {
    "path": ".idea/compiler.xml",
    "chars": 170,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <bytecodeTar"
  },
  {
    "path": ".idea/gradle.xml",
    "chars": 796,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleMigrationSettings\" migrationVersio"
  },
  {
    "path": ".idea/jarRepositories.xml",
    "chars": 1455,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RemoteRepositoriesConfiguration\">\n    <r"
  },
  {
    "path": ".idea/misc.xml",
    "chars": 372,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectRootManager\" version=\"2\" language"
  },
  {
    "path": ".idea/render.experimental.xml",
    "chars": 173,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RenderSettings\">\n    <option name=\"showD"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "chars": 564,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <o"
  },
  {
    "path": ".idea/shelf/Uncommitted_changes_before_Checkout_at_25-01-2021_21_36_[Default_Changelist]/shelved.patch",
    "chars": 1226,
    "preview": "Index: .idea/misc.xml\nIDEA additional info:\nSubsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP\n<+><"
  },
  {
    "path": ".idea/shelf/Uncommitted_changes_before_Checkout_at_25-01-2021_21_36__Default_Changelist_.xml",
    "chars": 431,
    "preview": "<changelist name=\"Uncommitted_changes_before_Checkout_at_25-01-2021_21_36_[Default_Changelist]\" date=\"1611590792291\" rec"
  },
  {
    "path": ".idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]/shelved.patch",
    "chars": 32777,
    "preview": "Index: app/src/main/java/com/project/farmingapp/viewmodel/AuthViewModel.kt\nIDEA additional info:\nSubsystem: com.intellij"
  },
  {
    "path": ".idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]1/shelved.patch",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".idea/shelf/Uncommitted_changes_before_Update_at_30-12-2020_21_59__Default_Changelist_.xml",
    "chars": 425,
    "preview": "<changelist name=\"Uncommitted_changes_before_Update_at_30-12-2020_21_59_[Default_Changelist]\" date=\"1609345750373\" recyc"
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 180,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2021 Het Suthar\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 1291,
    "preview": "# 👨‍🌾 Agri India - One stop application for Indian Farmers\n\n✒️ This is an Android Application designed for our Indian fa"
  },
  {
    "path": "app/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "app/build.gradle",
    "chars": 3831,
    "preview": "apply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\napply p"
  },
  {
    "path": "app/google-services.json",
    "chars": 1008,
    "preview": "{\n  \"project_info\": {\n    \"project_number\": \"1089918384238\",\n    \"project_id\": \"farming-app-2fc2a\",\n    \"storage_bucket\""
  },
  {
    "path": "app/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "app/src/androidTest/java/com/project/farmingapp/ExampleInstrumentedTest.kt",
    "chars": 671,
    "preview": "package com.project.farmingapp\n\nimport androidx.test.platform.app.InstrumentationRegistry\nimport androidx.test.ext.junit"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 1795,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/PrePaymentFragment.kt",
    "chars": 2371,
    "preview": "package com.project.farmingapp\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimpor"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/ApmcAdapter.kt",
    "chars": 2247,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/ArticleListAdapter.kt",
    "chars": 2403,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/AttributesNormalAdapter.kt",
    "chars": 1318,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.text.Layout\nimport android.view.La"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/AttributesSelectionAdapter.kt",
    "chars": 7261,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.graphics.Color\nimport android.grap"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/CartItemsAdapter.kt",
    "chars": 4731,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.util.Log\nimport android.view.LayoutInflater\nimport android.view.V"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/CurrentWeatherAdapter.kt",
    "chars": 3376,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.util.Log\nimport android.view.Layou"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/DashboardEcomItemAdapter.kt",
    "chars": 1736,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/EcommerceAdapter.kt",
    "chars": 2311,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/IntroAdapter.kt",
    "chars": 1437,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view."
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/MyOrdersAdapter.kt",
    "chars": 3462,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Intent\nimport android.util.Log\nimport android.view.Layout"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/PaginationListener.kt",
    "chars": 1371,
    "preview": "package com.project.farmingapp.adapter\n\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recycler"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/PostListUserProfileAdapter.kt",
    "chars": 1969,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.text.Layout\nimport android.text.fo"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/SMPostListAdapter.kt",
    "chars": 5604,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.text.format.DateUtils\nimport andro"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/WeatherAdapter.kt",
    "chars": 2416,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.util.Log\nimport android.view.Layou"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/adapter/YojnaAdapter.kt",
    "chars": 2190,
    "preview": "package com.project.farmingapp.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/APMCApi.kt",
    "chars": 1273,
    "preview": "package com.project.farmingapp.model\n\nimport com.project.farmingapp.model.data.APMCMain\nimport com.project.farmingapp.mo"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/APMCRepository.kt",
    "chars": 62,
    "preview": "package com.project.farmingapp.model\n\nclass APMCRepository {\n}"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/ArticleRepository.kt",
    "chars": 1391,
    "preview": "package com.project.farmingapp.model\n\nimport android.util.Log\nimport androidx.lifecycle.LiveData\nimport androidx.lifecyc"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/AuthRepository.kt",
    "chars": 3826,
    "preview": "package com.project.farmingapp.model\n\nimport android.util.Log\nimport android.widget.Toast\nimport androidx.lifecycle.Live"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/WeatherApi.kt",
    "chars": 840,
    "preview": "package com.project.farmingapp.model\n\nimport com.project.farmingapp.model.data.WeatherRootList\nimport retrofit2.Call\nimp"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/WeatherRepository.kt",
    "chars": 1266,
    "preview": "package com.project.farmingapp.model\n\nimport android.util.Log\nimport androidx.lifecycle.LiveData\nimport androidx.lifecyc"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/APMCCustomRecords.kt",
    "chars": 229,
    "preview": "package com.project.farmingapp.model.data\n\ndata class APMCCustomRecords(val state:String,val district:String,val market:"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/APMCMain.kt",
    "chars": 120,
    "preview": "package com.project.farmingapp.model.data\n\ndata class APMCMain(val updated_date: String, val records: List<APMCRecords>)"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/APMCRecords.kt",
    "chars": 209,
    "preview": "package com.project.farmingapp.model.data\n\n\ndata class APMCRecords(val state:String,val district:String,val market:Strin"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/CartItem.kt",
    "chars": 126,
    "preview": "package com.project.farmingapp.model.data\n\nimport java.sql.Timestamp\n\ndata class CartItem(var quantity: Int, val time: S"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/IntroData.kt",
    "chars": 138,
    "preview": "package com.project.farmingapp.model.data\n\ndata class IntroData (\n    val title :String,\n    val description: String,\n  "
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/Post.kt",
    "chars": 121,
    "preview": "package com.project.farmingapp.model.data\n\ndata class Post(val timeStamp: Long, val imageID: String, val imageUrl:String"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/Weather.kt",
    "chars": 171,
    "preview": "package com.project.farmingapp.model.data\n\ndata class Weather(val main:String =\"\"\n                   , val description:S"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/WeatherList.kt",
    "chars": 154,
    "preview": "package com.project.farmingapp.model.data\n\ndata class WeatherList(val main:WeatherMain,val weather:List<Weather>,val dt_"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/WeatherMain.kt",
    "chars": 141,
    "preview": "package com.project.farmingapp.model.data\n\ndata class WeatherMain(val temp:Float,val humidity:String,val temp_min:String"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/WeatherRootList.kt",
    "chars": 175,
    "preview": "package com.project.farmingapp.model.data\n\n//data class WeatherRootList(val list:List<WeatherList>) : List<WeatherList>\n"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/WeatherWind.kt",
    "chars": 84,
    "preview": "package com.project.farmingapp.model.data\n\ndata class WeatherWind (val speed: Float)"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/model/data/orders.kt",
    "chars": 444,
    "preview": "package com.project.farmingapp.model.data\n\nimport kotlinx.android.synthetic.main.activity_razor_pay.*\nimport java.sql.Ti"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/utilities/CartItemBuy.kt",
    "chars": 155,
    "preview": "package com.project.farmingapp.utilities\n\ninterface CartItemBuy {\n    fun addToOrders(productId: String, quantity: Int, "
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/utilities/CellClickListener.kt",
    "chars": 116,
    "preview": "package com.project.farmingapp.utilities\n\ninterface CellClickListener {\n    fun onCellClickListener(name: String)\n\n}"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/utilities/ViewUtils.kt",
    "chars": 370,
    "preview": "package com.project.farmingapp.utilities\n\nimport android.content.Context\nimport android.view.View\nimport android.widget."
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/apmc/ApmcFragment.kt",
    "chars": 19485,
    "preview": "package com.project.farmingapp.view.apmc\n\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.LayoutInf"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/articles/ArticleListFragment.kt",
    "chars": 4005,
    "preview": "package com.project.farmingapp.view.articles\n\nimport android.R.attr.fragment\nimport android.os.Bundle\nimport android.uti"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/articles/FruitsFragment.kt",
    "chars": 8754,
    "preview": "package com.project.farmingapp.view.articles\n\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.Layou"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/articles/MachineFragment.kt",
    "chars": 1931,
    "preview": "package com.project.farmingapp.view.articles\n\nimport android.os.Bundle\nimport androidx.fragment.app.Fragment\nimport andr"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/auth/LoginActivity.kt",
    "chars": 4484,
    "preview": "package com.project.farmingapp.view.auth\n\nimport android.content.Intent\nimport android.os.Bundle\nimport android.widget.T"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/auth/SignupActivity.kt",
    "chars": 3281,
    "preview": "package com.project.farmingapp.view.auth\n\nimport android.content.Intent\nimport androidx.appcompat.app.AppCompatActivity\n"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/dashboard/DashboardActivity.kt",
    "chars": 24163,
    "preview": "package com.project.farmingapp.view.dashboard\n\n\nimport android.Manifest\nimport android.annotation.SuppressLint\nimport an"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/dashboard/DashboardFragment.kt",
    "chars": 8153,
    "preview": "package com.project.farmingapp.view.dashboard\n\nimport android.content.Context\nimport android.content.SharedPreferences\ni"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/ecommerce/CartFragment.kt",
    "chars": 7320,
    "preview": "package com.project.farmingapp.view.ecommerce\n\nimport android.content.Intent\nimport android.os.Bundle\nimport android.uti"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/ecommerce/EcommerceFragment.kt",
    "chars": 6618,
    "preview": "package com.project.farmingapp.view.ecommerce\n\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.*\nim"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/ecommerce/EcommerceItemFragment.kt",
    "chars": 12757,
    "preview": "package com.project.farmingapp.view.ecommerce\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bu"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/ecommerce/MyOrdersFragment.kt",
    "chars": 5061,
    "preview": "package com.project.farmingapp.view.ecommerce\n\nimport android.content.Intent\nimport android.os.Bundle\nimport androidx.fr"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/ecommerce/PaymentFragment.kt",
    "chars": 1950,
    "preview": "package com.project.farmingapp.view.ecommerce\n\nimport android.os.Bundle\nimport androidx.fragment.app.Fragment\nimport and"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/ecommerce/RazorPayActivity.kt",
    "chars": 6561,
    "preview": "package com.project.farmingapp.view.ecommerce\n\nimport android.app.Activity\nimport androidx.appcompat.app.AppCompatActivi"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/introscreen/IntroActivity.kt",
    "chars": 6428,
    "preview": "package com.project.farmingapp.view.introscreen\n\nimport android.content.Context\nimport android.content.Intent\nimport and"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/socialmedia/SMCreatePostFragment.kt",
    "chars": 12008,
    "preview": "package com.project.farmingapp.view.socialmedia\n\nimport android.app.Activity\nimport android.content.Intent\nimport androi"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/socialmedia/SocialMediaPostsFragment.kt",
    "chars": 4602,
    "preview": "package com.project.farmingapp.view.socialmedia\n\nimport android.os.Bundle\nimport android.util.Log\nimport androidx.fragme"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/user/UserFragment.kt",
    "chars": 18166,
    "preview": "package com.project.farmingapp.view.user\n\nimport android.app.Activity\nimport android.app.AlertDialog\nimport android.cont"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/weather/WeatherFragment.kt",
    "chars": 5605,
    "preview": "package com.project.farmingapp.view.weather\n\nimport android.os.Build\nimport android.os.Bundle\n\nimport android.util.Log\ni"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/yojna/YojnaFragment.kt",
    "chars": 4496,
    "preview": "package com.project.farmingapp.view.yojna\n\nimport android.os.Bundle\nimport android.util.Log\nimport androidx.fragment.app"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/view/yojna/YojnaListFragment.kt",
    "chars": 4138,
    "preview": "package com.project.farmingapp.view.yojna\n\nimport android.os.Bundle\nimport android.util.Log\nimport androidx.fragment.app"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/ArticleListener.kt",
    "chars": 210,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport androidx.lifecycle.LiveData\n\ninterface ArticleListener {\n\n    fun onSta"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/ArticleViewModel.kt",
    "chars": 2320,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.util.Log\nimport androidx.lifecycle.LiveData\nimport androidx.lif"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/AuthListener.kt",
    "chars": 207,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport androidx.lifecycle.LiveData\n\ninterface AuthListener {\n\n    fun onStarte"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/AuthViewModel.kt",
    "chars": 3496,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.content.Intent\nimport android.util.Log\nimport android.view.View"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/EcommViewModel.kt",
    "chars": 3586,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.util.Log\nimport android.widget.Toast\nimport androidx.lifecycle."
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/SocialMediaViewModel.kt",
    "chars": 1078,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.ViewModel\n"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/UserDataViewModel.kt",
    "chars": 3619,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.content.Context\nimport android.util.Log\nimport android.widget.T"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/UserProfilePostsViewModel.kt",
    "chars": 4417,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.util.Log\nimport androidx.lifecycle.MutableLiveData\nimport andro"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/WeatherListener.kt",
    "chars": 153,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport androidx.lifecycle.LiveData\n\ninterface WeatherListener {\n    fun onSucc"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/WeatherViewModel.kt",
    "chars": 3020,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.util.Log\nimport androidx.lifecycle.LiveData\nimport androidx.lif"
  },
  {
    "path": "app/src/main/java/com/project/farmingapp/viewmodel/YojnaViewModel.kt",
    "chars": 1654,
    "preview": "package com.project.farmingapp.viewmodel\n\nimport android.util.Log\nimport androidx.lifecycle.MutableLiveData\nimport andro"
  },
  {
    "path": "app/src/main/res/anim/fade_scale.xml",
    "chars": 501,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <alpha\n    "
  },
  {
    "path": "app/src/main/res/anim/fade_transition.xml",
    "chars": 330,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <alpha\n     "
  },
  {
    "path": "app/src/main/res/anim/fade_transition_opposite.xml",
    "chars": 330,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <alpha\n     "
  },
  {
    "path": "app/src/main/res/color/chip_bg_states.xml",
    "chars": 261,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector\n    xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <it"
  },
  {
    "path": "app/src/main/res/drawable/add_icon.xml",
    "chars": 354,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/all_buttons.xml",
    "chars": 274,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <stroke\n  "
  },
  {
    "path": "app/src/main/res/drawable/apmc_card_bg.xml",
    "chars": 292,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid a"
  },
  {
    "path": "app/src/main/res/drawable/chip_back.xml",
    "chars": 290,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item a"
  },
  {
    "path": "app/src/main/res/drawable/dash_home.xml",
    "chars": 354,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/ecommbackground.xml",
    "chars": 316,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n<solid android"
  },
  {
    "path": "app/src/main/res/drawable/ecommborder.xml",
    "chars": 225,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n<solid android"
  },
  {
    "path": "app/src/main/res/drawable/edit_back.xml",
    "chars": 309,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <solid an"
  },
  {
    "path": "app/src/main/res/drawable/ic__keyboard_arrow_down.xml",
    "chars": 339,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#60AA39\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_check_24.xml",
    "chars": 330,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#E2F2DA\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_delete_forever_24.xml",
    "chars": 506,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#79C551\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_edit_24.xml",
    "chars": 446,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#E2F2DA\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_local_shipping_24.xml",
    "chars": 618,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#60AA39\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_photo_camera_24.xml",
    "chars": 590,
    "preview": "<vector android:height=\"50dp\" android:tint=\"#E2F2DA\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_shopping_cart_24.xml",
    "chars": 726,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_trending_up_24.xml",
    "chars": 356,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#60AA39\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/ic_high_temp.xml",
    "chars": 2975,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"512dp\"\n    android:height=\"512dp\"\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_humidity.xml",
    "chars": 1409,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"512dp\"\n    android:height=\"512dp\"\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "chars": 5606,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:wi"
  },
  {
    "path": "app/src/main/res/drawable/ic_low_temp.xml",
    "chars": 3405,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"512dp\"\n    android:height=\"512dp\"\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_user_profile.xml",
    "chars": 530,
    "preview": "<vector android:height=\"24dp\" android:tint=\"#60AA39\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "app/src/main/res/drawable/indicator_active.xml",
    "chars": 292,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:sha"
  },
  {
    "path": "app/src/main/res/drawable/indicator_inactive.xml",
    "chars": 264,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:sha"
  },
  {
    "path": "app/src/main/res/drawable/minus_icon.xml",
    "chars": 336,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/post_border.xml",
    "chars": 214,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android"
  },
  {
    "path": "app/src/main/res/drawable/post_logo.xml",
    "chars": 977,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/progress_background.xml",
    "chars": 695,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:pi"
  },
  {
    "path": "app/src/main/res/drawable/round_borderless_general.xml",
    "chars": 169,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <corners\n"
  },
  {
    "path": "app/src/main/res/drawable/rounder_border_general.xml",
    "chars": 263,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <corners\n"
  },
  {
    "path": "app/src/main/res/drawable/table_border.xml",
    "chars": 256,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android"
  },
  {
    "path": "app/src/main/res/drawable/table_leftbottom_border.xml",
    "chars": 276,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android"
  },
  {
    "path": "app/src/main/res/drawable/table_lefttop_border.xml",
    "chars": 273,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android"
  },
  {
    "path": "app/src/main/res/drawable/table_rightbottom_border.xml",
    "chars": 277,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android"
  },
  {
    "path": "app/src/main/res/drawable/table_righttop_border.xml",
    "chars": 274,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android"
  },
  {
    "path": "app/src/main/res/drawable/weather_rcyclr_bg.xml",
    "chars": 259,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:sha"
  },
  {
    "path": "app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "chars": 1702,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    "
  },
  {
    "path": "app/src/main/res/font/lato.xml",
    "chars": 353,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<font-family xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        app:font"
  },
  {
    "path": "app/src/main/res/font/lato_bold.xml",
    "chars": 373,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<font-family xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        app:font"
  },
  {
    "path": "app/src/main/res/font/lato_light.xml",
    "chars": 373,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<font-family xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        app:font"
  },
  {
    "path": "app/src/main/res/layout/activity_dashboard.xml",
    "chars": 1165,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<layout  xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:ap"
  },
  {
    "path": "app/src/main/res/layout/activity_intro.xml",
    "chars": 2659,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/activity_login.xml",
    "chars": 8782,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app"
  },
  {
    "path": "app/src/main/res/layout/activity_razor_pay.xml",
    "chars": 9537,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/activity_signup.xml",
    "chars": 12592,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app"
  },
  {
    "path": "app/src/main/res/layout/apmc_single_list.xml",
    "chars": 8578,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/app_bar_main.xml",
    "chars": 1806,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/article_list_single.xml",
    "chars": 2209,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/fragment_apmc.xml",
    "chars": 7388,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_article_list.xml",
    "chars": 1458,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_cart.xml",
    "chars": 5952,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_dashboard.xml",
    "chars": 26213,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_ecommerce.xml",
    "chars": 4167,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_ecommerce_item.xml",
    "chars": 22495,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_fruits.xml",
    "chars": 16020,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xm"
  },
  {
    "path": "app/src/main/res/layout/fragment_machine.xml",
    "chars": 517,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_my_orders.xml",
    "chars": 957,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_payment.xml",
    "chars": 11394,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_pre_payment.xml",
    "chars": 404,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_s_m_create_post.xml",
    "chars": 4748,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_social_media_posts.xml",
    "chars": 1329,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_user.xml",
    "chars": 11988,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_weather.xml",
    "chars": 2591,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app="
  },
  {
    "path": "app/src/main/res/layout/fragment_yojna.xml",
    "chars": 13782,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/fragment_yojna_list.xml",
    "chars": 1400,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/item_loading.xml",
    "chars": 995,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/nav_header.xml",
    "chars": 3837,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/post_with_image_sm.xml",
    "chars": 6027,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/similarproductlist.xml",
    "chars": 1921,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_cart_item.xml",
    "chars": 9113,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_currentweather.xml",
    "chars": 6301,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_dashboard_ecomm_item.xml",
    "chars": 3049,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_ecomm_item.xml",
    "chars": 4794,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n\n\n    xmlns:android=\"http://sc"
  },
  {
    "path": "app/src/main/res/layout/single_myorder_item.xml",
    "chars": 7164,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_normal_attributes_ecomm.xml",
    "chars": 1179,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_selection_attributes_ecomm.xml",
    "chars": 5186,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_slider_screen.xml",
    "chars": 1960,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_weather.xml",
    "chars": 5809,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/single_yojna_list.xml",
    "chars": 3382,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/layout/user_profile_posts_single.xml",
    "chars": 3528,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "app/src/main/res/menu/cart_menu.xml",
    "chars": 350,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"h"
  },
  {
    "path": "app/src/main/res/menu/dash_menu.xml",
    "chars": 602,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item andr"
  },
  {
    "path": "app/src/main/res/menu/nav_drawer_menu.xml",
    "chars": 787,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n     "
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "chars": 239,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "chars": 272,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "chars": 981,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#79C551</color>\n    <color name=\"color"
  },
  {
    "path": "app/src/main/res/values/font_certs.xml",
    "chars": 3581,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <array name=\"com_google_android_gms_fonts_certs\">\n        <item>@"
  },
  {
    "path": "app/src/main/res/values/preloaded_fonts.xml",
    "chars": 240,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <array name=\"preloaded_fonts\" translatable=\"false\">\n        <item"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "chars": 384,
    "preview": "<resources>\n    <string name=\"app_name\">Agri India</string>\n    <!-- TODO: Remove or change this placeholder text -->\n  "
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "chars": 1077,
    "preview": "<resources>\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.MaterialComponents.Light.DarkA"
  },
  {
    "path": "app/src/test/java/com/project/farmingapp/ExampleUnitTest.kt",
    "chars": 346,
    "preview": "package com.project.farmingapp\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which "
  },
  {
    "path": "build.gradle",
    "chars": 833,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    ex"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 232,
    "preview": "#Tue Dec 29 14:11:15 IST 2020\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
  },
  {
    "path": "gradle.properties",
    "chars": 1196,
    "preview": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will ov"
  },
  {
    "path": "gradlew",
    "chars": 5296,
    "preview": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up"
  },
  {
    "path": "gradlew.bat",
    "chars": 2176,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
  },
  {
    "path": "settings.gradle",
    "chars": 47,
    "preview": "include ':app'\nrootProject.name = \"Farming App\""
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the hetsuthar028/Farming-App GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 194 files (582.6 KB), approximately 138.0k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!