Advertisement
Guest User

Untitled

a guest
Aug 24th, 2021
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 13.77 KB | None | 0 0
  1.  
  2. @AndroidEntryPoint
  3. class MainActivity : AppCompatActivity() {
  4.  
  5.     private lateinit var binding: ActivityMainBinding
  6.     private lateinit var navController: NavController
  7.     private lateinit var appBarConfiguration: AppBarConfiguration
  8.     private var arrayList: ArrayList<TopModel> = arrayListOf()
  9.  
  10.     private lateinit var reviewManager: ReviewManager
  11.     private val viewModel by viewModels<SliderViewModel>()
  12.     private lateinit var fab: FloatingActionButton
  13.     private lateinit var headerBinding: NavHeaderMainBinding
  14.  
  15.     override fun attachBaseContext(newBase: Context?) {
  16.         val lang = newBase?.let { Session(it).getLanguage() }
  17.         super.attachBaseContext(ContextWrapper(lang?.let { newBase.setAppLocale(it) }))
  18.     }
  19.  
  20.     override fun onCreate(savedInstanceState: Bundle?) {
  21.         super.onCreate(savedInstanceState)
  22.         binding = ActivityMainBinding.inflate(layoutInflater)
  23.         setContentView(binding.root)
  24.  
  25.         fab = binding.followDone
  26.  
  27.         reviewManager = ReviewManagerFactory.create(this)
  28.  
  29.         binding.apply {
  30.             setSupportActionBar(toolbar)
  31.  
  32.             navController = findNavController(R.id.nav_host_fragment)
  33.  
  34.             appBarConfiguration = AppBarConfiguration(
  35.                 setOf(
  36.                     R.id.nav_post, R.id.nav_center,
  37.                     R.id.nav_communication, R.id.nav_notification,
  38.                     R.id.nav_profile, R.id.bajarBhav, R.id.aboutUs, R.id.privacy
  39.                 ), drawer
  40.             )
  41.             setupActionBarWithNavController(navController, appBarConfiguration)
  42.             navigationView.setupWithNavController(navController)
  43.             navView.setupWithNavController(navController)
  44.  
  45.             val session = Session(this@MainActivity)
  46.             headerBinding = NavHeaderMainBinding.inflate(LayoutInflater.from(this@MainActivity))
  47.             headerBinding.apply {
  48.                 if (session.isUserLoggedIn()) {
  49.                     userName.text = session.getUserName()
  50.                     userMobile.text = session.getUserPhone()
  51.                     Glide.with(userProfile).asBitmap()
  52.                         .circleCrop()
  53.                         .load(session.getUserImage())
  54.                         .into(userProfile)
  55.  
  56.                 } else {
  57.                     userName.text = getString(R.string.app_name)
  58.                     userMobile.text = ""
  59.                     userProfile.setImageResource(R.mipmap.ic_launcher_foreground)
  60.                 }
  61.             }
  62.             navigationView.addHeaderView(headerBinding.root)
  63.             navigationViewLogin()
  64.             navigationView.setNavigationItemSelectedListener { item ->
  65.                 when (item.itemId) {
  66.                     R.id.nav_communication -> {
  67.                         val navigationOption: NavOptions = NavOptions.Builder()
  68.                             .setLaunchSingleTop(true)
  69.                             .setPopUpTo(R.id.nav_communication, false)
  70.                             .setEnterAnim(R.anim.nav_default_enter_anim)
  71.                             .setExitAnim(R.anim.nav_default_exit_anim)
  72.                             .setPopEnterAnim(R.anim.nav_default_pop_enter_anim)
  73.                             .setPopExitAnim(R.anim.nav_default_pop_exit_anim)
  74.                             .build()
  75.                         navController.navigate(R.id.nav_communication, null, navigationOption)
  76.                     }
  77.                     R.id.aboutUs -> {
  78.                         val bundle = Bundle()
  79.                         bundle.putString("url", "https://starlinedemo.com/khedut_putra/about_us.php")
  80.                         bundle.putString("displayName", "About us")
  81.                         navController.navigate(R.id.bajarBhav, bundle)
  82.                     }
  83.                     R.id.shareApp -> {
  84.                         shareApp()
  85.                     }
  86.                     R.id.rateUs -> {
  87.                         showRateApp()
  88.                     }
  89.                     R.id.changeLan -> {
  90.                         if (session.getLanguage().equals("gu", true)) {
  91.                             item.title = getString(R.string.gujarati)
  92.                             session.setLanguage("en")
  93.                             changeLanguage("en")
  94.                         } else {
  95.                             item.title = getString(R.string.english)
  96.                             session.setLanguage("gu")
  97.                             changeLanguage("gu")
  98.                         }
  99.                     }
  100.                     R.id.privacy -> {
  101.                         val bundle = Bundle()
  102.                         bundle.putString("url", "https://starlinedemo.com/khedut_putra/privacy_policy.php")
  103.                         bundle.putString("displayName", "Privacy Policy")
  104.                         navController.navigate(R.id.bajarBhav, bundle)
  105.                     }
  106.                     R.id.logOut -> {
  107.                         if (session.isUserLoggedIn()) {
  108.                             session.setUserLoggedIn(false)
  109.                             session.setUserName("")
  110.                             session.setUserPhone("")
  111.                             session.setUserImage("")
  112.                             session.setUserId("")
  113.                             item.title = getString(R.string.login)
  114.                             navigationViewLogin()
  115.                         } else {
  116.                             item.title = getString(R.string.loginout)
  117.                             navController.navigate(R.id.loginBottomSheet)
  118.                         }
  119.                     }
  120.                 }
  121.                 if (drawer.isDrawerOpen(GravityCompat.START)) {
  122.                     drawer.closeDrawer(GravityCompat.START)
  123.                 }
  124.                 return@setNavigationItemSelectedListener true
  125.             }
  126.             /*Start:-> Top RecyclerView for showing different types of data*/
  127.  
  128.             arrayList.clear()
  129.             arrayList.add(TopModel(getString(R.string.ask_question), R.drawable.ic_baseline_add))
  130.             arrayList.add(TopModel(getString(R.string.market_price), R.drawable.ic_grain))
  131.             arrayList.add(TopModel(getString(R.string.kishanSaman), R.drawable.pmkishan))
  132.             arrayList.add(TopModel(getString(R.string.ikhedutPortal), R.drawable.ikhedut))
  133.             arrayList.add(TopModel(getString(R.string.divyaBhaskar), R.drawable.divya_bhaskar))
  134.             arrayList.add(TopModel(getString(R.string.anyror), R.drawable.ic_grain))
  135.             arrayList.add(TopModel(getString(R.string.radioChannel), R.drawable.ic_baseline_radio))
  136.             arrayList.add(TopModel(getString(R.string.weather), R.drawable.ic_img_weather))
  137.  
  138.             lifecycleScope.launchWhenStarted {
  139.                 viewModel.getSliderList()
  140.                 viewModel._sliderList.observe(this@MainActivity, EventObserver {
  141.                     when (it.status) {
  142.                         Status.LOADING -> {
  143.  
  144.                         }
  145.                         Status.ERROR -> {
  146.  
  147.                         }
  148.                         Status.SUCCESS -> {
  149.                             val arrayList = arrayListOf<SliderModel.Data>()
  150.                             arrayList.add(SliderModel.Data(title = getString(R.string.ask_question), sliderLink = "", sliderImage = ""))
  151.                             it.data?.let { it1 -> arrayList.addAll(it1) }
  152.                             arrayList.add(SliderModel.Data(sliderImage = "", title = getString(R.string.weather), sliderLink = ""))
  153.  
  154.                             val topAdapter = TopAdapter(this@MainActivity, arrayList)
  155.                             recyclerView.adapter = topAdapter
  156.                             topAdapter.onItemClick = { topModel, _ ->
  157.                                 if (topModel.title.equals(getString(R.string.ask_question), true)) {
  158.                                     if (Session(this@MainActivity).isUserLoggedIn()) {
  159.                                         navController.navigate(R.id.nav_post)
  160.                                     } else {
  161.                                         navController.navigate(R.id.loginBottomSheet)
  162.                                     }
  163.  
  164.                                 } else if (topModel.title.equals(getString(R.string.weather), true)) {
  165.                                     navController.navigate(R.id.weather)
  166.                                 } else {
  167.                                     val bundle = Bundle()
  168.                                     bundle.putString("url", topModel.sliderLink)
  169.                                     bundle.putString("displayName", topModel.title)
  170.                                     navController.navigate(R.id.bajarBhav, bundle)
  171.                                 }
  172.  
  173.                                 /*else if (topModel.title.equals(getString(R.string.market_price), true)) {
  174.                                             val bundle = Bundle()
  175.                                             bundle.putString("url", "http://www.apmcrajkot.com/daily_rates")
  176.                                             bundle.putString("displayName", getString(R.string.market_price))
  177.                                             navController.navigate(R.id.bajarBhav, bundle)
  178.                                         } else if (topModel.title.equals(getString(R.string.kishanSaman), true)) {
  179.                                             val bundle = Bundle()
  180.                                             bundle.putString("url", "https://www.pmkisan.gov.in/beneficiarystatus/NewHome3.aspx")
  181.                                             bundle.putString("displayName", getString(R.string.kishanSaman))
  182.                                             navController.navigate(R.id.bajarBhav, bundle)
  183.                                         } else if (topModel.title.equals(getString(R.string.ikhedutPortal), true)) {
  184.                                             val bundle = Bundle()
  185.                                             bundle.putString("url", "https://ikhedut.gujarat.gov.in/Public/frm_Public_SchemeDetails.aspx")
  186.                                             bundle.putString("displayName", getString(R.string.ikhedutPortal))
  187.                                             navController.navigate(R.id.bajarBhav, bundle)
  188.                                         } else if (topModel.title.equals(getString(R.string.divyaBhaskar), true)) {
  189.                                             val bundle = Bundle()
  190.                                             bundle.putString("url", "https://www.divyabhaskar.co.in/")
  191.                                             bundle.putString("displayName", getString(R.string.divyaBhaskar))
  192.                                             navController.navigate(R.id.bajarBhav, bundle)
  193.                                         } else if (topModel.title.equals(getString(R.string.anyror), true)) {
  194.                                             val bundle = Bundle()
  195.                                             bundle.putString("url", "https://anyror.gujarat.gov.in/")
  196.                                             bundle.putString("displayName", getString(R.string.anyror))
  197.                                             navController.navigate(R.id.bajarBhav, bundle)
  198.  
  199.                                         } else if (topModel.title.equals(getString(R.string.radioChannel), true)) {
  200.                                             val bundle = Bundle()
  201.                                             bundle.putString("url", "http://radio.garden/visit/ahmedabad/vhLjTndB")
  202.                                             bundle.putString("displayName", getString(R.string.radioChannel))
  203.                                             navController.navigate(R.id.bajarBhav, bundle)
  204.                                         }*/
  205.                             }
  206.                         }
  207.                     }
  208.                 })
  209.             }
  210.  
  211.         }
  212.     }
  213.  
  214.     override fun onCreateOptionsMenu(menu: Menu?): Boolean {
  215.         menuInflater.inflate(R.menu.language_menu, menu)
  216.         if (Session(this).getLanguage().equals("gu", true)) {
  217.             menu?.findItem(R.id.changeLng)?.title = getString(R.string.english)
  218.         } else {
  219.             menu?.findItem(R.id.changeLng)?.title = getString(R.string.gujarati)
  220.         }
  221.         menu?.findItem(R.id.changeLng)?.isVisible = false
  222.         return true
  223.     }
  224.  
  225.     override fun onOptionsItemSelected(item: MenuItem): Boolean {
  226.         if (item.itemId == R.id.changeLng) {
  227.             if (Session(this).getLanguage().equals("gu", true)) {
  228.                 item.title = getString(R.string.english)
  229.                 Session(this).setLanguage("en")
  230.                 changeLanguage("en")
  231.             } else {
  232.                 item.title = getString(R.string.gujarati)
  233.                 Session(this).setLanguage("gu")
  234.                 changeLanguage("gu")
  235.             }
  236.             return true
  237.         }
  238.         if (binding.drawer.isDrawerOpen(GravityCompat.START)) {
  239.             binding.drawer.closeDrawer(GravityCompat.START)
  240.         }
  241.         return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
  242.     }
  243.  
  244.     private fun changeLanguage(lng: String) {
  245.         val locale = Locale(lng)
  246.         Locale.setDefault(locale)
  247.         val config = Configuration(resources.configuration)
  248.         config.locale = locale
  249.         applicationContext.resources.updateConfiguration(config, null)
  250.         startActivity(Intent(this, MainActivity::class.java))
  251.         finish()
  252.     }
  253.  
  254.     fun hideBottomNavigation() {
  255.         binding.navView.visibility = View.GONE
  256.         if (binding.recyclerView.visibility == View.VISIBLE) {
  257.             binding.recyclerView.visibility = View.GONE
  258.         }
  259.         if (binding.view.visibility == View.VISIBLE) {
  260.             binding.view.visibility = View.GONE
  261.         }
  262.     }
  263.  
  264.     fun showBottomNavigation() {
  265.         binding.navView.visibility = View.VISIBLE
  266.         if (binding.recyclerView.visibility == View.GONE) {
  267.             binding.recyclerView.visibility = View.VISIBLE
  268.         }
  269.         if (binding.view.visibility == View.GONE) {
  270.             binding.view.visibility = View.VISIBLE
  271.         }
  272.     }
  273.  
  274.     fun resetCollapsed() {
  275.         val params: CoordinatorLayout.LayoutParams = binding.appBar.layoutParams as CoordinatorLayout.LayoutParams
  276.         val behavior = params.behavior as AppBarLayout.Behavior
  277.         if (behavior != null) {
  278.             behavior.topAndBottomOffset = 0
  279.             behavior.onNestedPreScroll(binding.coordinator, binding.appBar, binding.navView, 0, 1, intArrayOf(2))
  280.         }
  281.     }
  282.  
  283.     fun getFloatingButton(): FloatingActionButton {
  284.         return fab
  285.     }
  286.  
  287.     override fun onSupportNavigateUp(): Boolean {
  288.         return findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
  289.     }
  290.  
  291.     override fun onPause() {
  292.         super.onPause()
  293.         if (isFinishing) {
  294.             binding.unbind()
  295.         }
  296.     }
  297.  
  298.     fun navigationViewLogin() {
  299.         if (Session(this).isUserLoggedIn()) {
  300.             binding.navigationView.menu.findItem(R.id.logOut).title = getString(R.string.loginout)
  301.         } else {
  302.             binding.navigationView.menu.findItem(R.id.logOut).title = getString(R.string.login)
  303.         }
  304.     }
  305.  
  306.     private fun shareApp() {
  307.         try {
  308.             val string = "${resources.getString(R.string.recommend)} \nhttps://play.google.com/store/apps/details?id=${application.packageName}".trimIndent()
  309.             val intent = Intent(Intent.ACTION_SEND)
  310.             intent.type = "text/plain"
  311.             intent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.app_name))
  312.             intent.putExtra(Intent.EXTRA_TEXT, string)
  313.             startActivity(Intent.createChooser(intent, resources.getString(R.string.choose_one)))
  314.         } catch (e: Exception) {
  315.             Log.d("app_data", "$e")
  316.         }
  317.     }
  318.  
  319.     private fun showRateApp() {
  320.         val request = reviewManager.requestReviewFlow()
  321.         request.addOnCompleteListener { task: Task<ReviewInfo?> ->
  322.             if (task.isSuccessful) {
  323.                 // We can get the ReviewInfo object
  324.                 val reviewInfo = task.result
  325.                 val flow = reviewManager.launchReviewFlow(this, reviewInfo)
  326.                 flow.addOnCompleteListener {}
  327.             } else {
  328.                 // There was some problem, continue regardless of the result.
  329.                 // show native rate app dialog on error
  330.                 showRateAppFallbackDialog()
  331.             }
  332.         }
  333.     }
  334.  
  335.     private fun showRateAppFallbackDialog() {
  336.         val builder = MaterialAlertDialogBuilder(this)
  337.         val inflater = this.getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
  338.         val rateAppView: View = inflater.inflate(R.layout.rate_app_layout, null, false)
  339.         builder.setView(rateAppView)
  340.         val save: MaterialButton = rateAppView.findViewById(R.id.save)
  341.         val cancel: MaterialButton = rateAppView.findViewById(R.id.cancel)
  342.         val dialog = builder.show()
  343.         save.setOnClickListener {
  344.             val uri = Uri.parse("market://details?id=" + this.application.packageName)
  345.             val goToMarket = Intent(Intent.ACTION_VIEW, uri)
  346.             // To count with Play market backstack, After pressing back button,
  347.             // to taken back to our application, we need to add following flags to intent.
  348.             goToMarket.addFlags(
  349.                 Intent.FLAG_ACTIVITY_NO_HISTORY or
  350.                         Intent.FLAG_ACTIVITY_NEW_DOCUMENT or
  351.                         Intent.FLAG_ACTIVITY_MULTIPLE_TASK
  352.             )
  353.             try {
  354.                 startActivity(goToMarket)
  355.             } catch (e: ActivityNotFoundException) {
  356.                 startActivity(
  357.                     Intent(
  358.                         Intent.ACTION_VIEW,
  359.                         Uri.parse("http://play.google.com/store/apps/details?id=" + application.packageName)
  360.                     )
  361.                 )
  362.             }
  363.             dialog.dismiss()
  364.         }
  365.         cancel.setOnClickListener { dialog.dismiss() }
  366.     }
  367.  
  368.  
  369.     override fun onBackPressed() {
  370.         if (binding.drawer.isDrawerOpen(GravityCompat.START)) {
  371.             binding.drawer.closeDrawer(GravityCompat.START)
  372.         } else {
  373.             super.onBackPressed()
  374.         }
  375.     }
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement