Professional Documents
Culture Documents
It is certified that this project report titled “My Murlipura : E-Commerce Web
App” by Mohit Mishra in the partial fulfillment of requirement for the award of
Bachelor of Computer Application submitted to University Of Rajasthan, Jaipur is
student’s own work carried out under my supervision and guidance. This project
report has not been submitted to any other University or Institution for award of
degree. The work contained in this project report is as per University standards.
Mr. Shantanu
Head of Department
Sri Balaji P.G Mahavidyalaya, Jaipur
CANDIDATE’S DECLARATION
Mohit Mishra
Bachelor of Computer Application
Roll No.
Enrollment No.: 18/8063
ABSTRACT
Mohit Mishra
Bachelor of Computer Application
Roll No.
Enrollment No.: 18/8063
Sl. No. Table of Contents Pg. No.
Certificate 2
Candidate’s Declaration 3
Abstract 4
Acknowledgement 5
1. Introduction 7
2. System Study 8
3. Software Requirements Specification 10
3.1 Introduction 10
3.1.1 Purpose 10
3.1.2 Document Conventions 10
3.1.2 Reading Suggestions 10
3.1.2 Product Scope 12
3.2 Overall description 13
3.2.1 Product Perspective 13
3.2.2 Product Functions 13
3.2.3 User Classes and Characteristics 13
3.2.4 Operating Environment 13
3.2.5 Design and Implementation Constraints 13
3.2.6 User Documentation 14
3.2.7 Assumptions and Dependencies 14
3.3 External Interface Requirements 14
3.3.1 User Interfaces 14
3.3.2 Hardware Interfaces 14
3.3.3 Software Interfaces 14
3.3.4 Communications Interfaces 15
3.4 System Features 15
3.4.1 Authentication 15
3.4.2 Push Notification 16
3.4.3 Analytics 16
3.5 Other non functional requirements 17
3.5.1 Performance Requirements 17
3.5.2 Safety Requirements 17
3.5.3 Security Requirements 17
3.5.4 Software Quality Attributes 17
4. Software Description 19
5. Project Design 21
6. Source Code 23
7. Screenshots 39
8. References 47
I - INTRODUCTION
The growth of smartphone usage has changed the retail landscape and consumer
behavior drastically. A large share of online purchases are now taking place on
mobile, especially in apps. In 2018, global time spent in app nearly doubled, up 45%
from 2016, including a 70% increase in the US. And this trend is only increasing from
here: By 2021, mobile transactions are projected to double on a worldwide scale,
accounting for 75% of total ecommerce sales.
My Murlipura, is an android web-app with works towards its website to enlarge their
audience to Android devices also.
It ensure all its customers concerns raised are addressed timely. Its dedicated team of
customer care specialists work round the clock to resolve all issues satisfactorily.
As an initiative, Currently its target is only Murlipura’s people, Due to small distance
and same regions. It provides free and fast delivery, withing two hours.
It has an user-friendly interface, which makes it easy-to-use for each and every user.
II - SYSTEM STUDY
1. Authentication
1.4 Validation
Validating any application is an important criterion before releasing the application to
the users. If there is no validation, the information entered by users may be redundant,
formatted inappropriately and cannot be maintained.
In the Login and Sign Up Page, I have validated all the login information that is
required for the user to sign up for the first time. Fields like name, email, password,
profile photo are validated appropriately by displaying error messages.
2. Push Notification
2.1.2 Offers
Offers Contains those kind of notifications which are not sent to every user, It is only
sent to those users who wants to receive updates about offers from My Murlipura.
Offers notifications can be turned on or off through settings page.
3. Analytics
1. INTRODUCTION
1.1 Purpose
The purpose of this document is to present a detailed description of the android
application My Murlipura.apk. It will explain the importance and features of the
application, the interfaces of the application, what the application will do, the
constraints under which it must operate.
Section 1: Introduction
My Murlipura works to enlarge the audience of certain vendors through E –
Commerce and let the customers get their required product without walking out.
The main idea behind this project is, as per COVID-19 effects, people are not able
to walk out to purchase their required products due to lockdown and also for their
safety purposes, so without letting the customers suffer about this My Murlipura
works to deliver products to the doorsteps of them. The idea also ensures the safety
of the users and provides clean and safe service in the era of this pandemic. The
application provides a very user friendly interface which provides user a very clean
and premium experience. The application is basically for house hold items which
consist of Groceries, Dairy, Housewares and many other goods. The application
targets the audience of Murlipura region and provides fast delivery. Our goal is to
provide good experience and fast services to our users.
Push notifications
This feature will give the user real time update notification. There is two channel
provided for notifications first one is “notification” standing for all general
notifications and the other one is “offers” standing for notifications which comes
under offers category.
Custom branding
It has its custom branding logo and other specific brand colors(Dark Blue and
Light Pink) that represent its brand itself.
Great user experience
The application gives a great user experience with its Easy-To-Understand UI
and smooth processing
Firebase Analytics
With Firebase, We can know how the app is working in the field. “How Stable
the version is?”, “Daily Active Users” etc.
Rating and feedback
Users can rate the application through Rate Button and also give their feedback,
suggestions and ask their queries withing the app.
Synchronization
This is an Web-Based Application For My Murlipura. The website and android
application both are completely synchronized with the databases.
1. Product Perspective
The My Murlipura.apk application is a new Android based web-application. It is
implemented with Android Studio. The primary technologies used in development
of this project is Kotlin Language for working, XML for designing and Firebase for
authentication, database and analytics.
2. Product Functions
My Murlipura application is easy to use, user friendly, safe and secure, Android
based mobile application. The main features of this application are that it is a local
area shopping as well as for selling application with free product delivery within
the specified locality. User can register as seller within the app with one click.
4. Operating Environment
The application will only be available for the Android operating systems. The
application shall only be used with compatible android devices The user shall use
this application on Android OS 5.0(API 21) or any later versions of the Android
OS.
6. User Documentation
Slider Intro
At the starting of the application, the user will experience a slider intro of the
application which helps user to know about the main features and objectives of the
application. The developer ensures that the slider intro will only start at very first
time when user opens the application. In case of misunderstanding, the user can use
the “App Tours” option in the “Settings” to experience the slide intro again.
Online Help
Theire team provided there contact information in the “About” section of the
application in case of any help needed. The user can easily contact the admin
regarding any issue they encounter.
4. SYSTEM FEATURES
1. Authentication
2. Push Notification
2.2.2 Offers
Offers Contains those kind of notifications which are not sent to every user, It is only
sent to those users who wants to receive updates about offers from My Murlipura.
Offers notifications can be turned on or off through settings page.
3. Analytics
5.4.2 Availability
The application will be available at all times on the user‟s Android device, as long as the
device is in proper working order. The functionality of the application will depend on any
external services such as internet access that are required. If those services are unavailable,
the user should be alerted.
5.4.3 Security
The software never disclose any personal information of any users, and should
collect no personal information from its own users.
5.4.4 Maintainability
This software will be designed to run on any Android operating system version 5.0 or
higher. The software will be forward compatible for all currently released Android
operating system versions (up to 12).
IV - SOFTWARE DESCRIPTION
Firebase:
Firebase is a platform developed by Google for creating mobile and web
applications. It was originally an independent company founded in 2011. In 2014,
Google acquired the platform and it is now their flagship offering for app
development
XML:
Android provides a straight forward XML vocabulary that corresponds to the
View classes and subclasses, such as those for widgets and layouts. You can also
use Android Studio's Layout Editor to build your XML layout using a drag-and-
drop interface. Instantiate layout elements at runtime.
Jetpack Libraries:
Jetpack is a suite of libraries to help developers follow best practices, reduce
boilerplate code, and write code that works consistently across Android versions
and devices so that developers can focus on the code they care about.
SPLASH SCREEN
SLIDER INTRO
HOME PAGE
LOGIN
EDIT PROFILE
HOME PAGE
Edit Profile()
Shop Now()
Register As Seller()
Settings()
Connect With Us On()
Profile Photo
First Name 2 About()
1 SOCIAL 3 4 5
Last Name SignOut()
Email MEDIA
Exit()
Password HANDLES
Gender
Save Changes() REGISTER AS SELLER REGISTER AS SELLER
Delete Profile() Name OFFLINE or ONLINE
Val
SETTINGS Phone ABOUT US
Number Dairy Products
idat Fruits And Vegetables
Edit Profile() Email
ion Grocery
Address
Enable News() PinCode Electronics
EXIT
App Tour() Step Ahead Medicines
INTENT
Query()
Fresh Start() Others
Register
Hide Register As Seller Btn()
Share App()
Rate Us()
2 1 3 4 5
CLEAR
SUBSCRIBE APPLICATION HIDE SHARE PLAY
TO DATA REGISTER INTENT STORE
OFFERS INTENT AS INTENT
SELLER
WEBSITE
INTENT
VI – SOURCE CODE
1. LoginFragment.kt
package com.mymurlipura
import android.content.Intent
import android.os.Bundle
import android.text.SpannableString
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.util.Patterns
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ProgressBar
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.Navigation
import com.google.android.gms.tasks.OnFailureListener
import com.google.android.material.textfield.TextInputEditText
import com.google.firebase.auth.FirebaseAuth
loginBtn = loginView.findViewById(R.id.loginBtn)
etEmail = loginView.findViewById(R.id.login_email)
etPassword = loginView.findViewById(R.id.login_password)
progressbar = loginView.findViewById(R.id.progressBar)
forgotPwd = loginView.findViewById(R.id.forgot_pwdBtn)
mAuth = FirebaseAuth.getInstance()
loginBtn.setOnClickListener(View.OnClickListener {
email = etEmail.text.toString().trim()
password = etPassword.text.toString().trim()
if (confirmFilled()){
loginUser(email, password)
}
})
forgotPwd.setOnClickListener(View.OnClickListener {
view?.let {
Navigation.findNavController(
it
).navigate(R.id.action_loginFragment_to_forgotPassword)
}
(requireActivity() as
AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(
false
)
})
return loginView
}
2. HomeFragment.kt
package com.mymurlipura
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView
import androidx.core.widget.NestedScrollView
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import com.google.android.gms.tasks.OnCompleteListener
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.firestore.DocumentReference
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import com.mikhaellopez.circularimageview.CircularImageView
import com.mymurlipura.mangers.ApplicationPrefs
import com.squareup.picasso.Picasso
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS",
"DEPRECATION")
class HomeFragment : Fragment() {
@SuppressLint("RestrictedApi", "UseCompatLoadingForDrawables")
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
(requireActivity() as AppCompatActivity).supportActionBar?.hide()
val rootView = inflater.inflate(R.layout.fragment_home, container, false)
//Elements Initializing
userFirstName = rootView.findViewById(R.id.use_first_name)
profileImageShow = rootView.findViewById(R.id.img_profile_show)
greet = rootView.findViewById(R.id.greet)
editProfileBtn = rootView.findViewById(R.id.editProfileBtn)
profileCardView = rootView.findViewById(R.id.profileCardView)
mainScroll = rootView.findViewById(R.id.mainScroll)
shopBtn = rootView.findViewById(R.id.shopNowBtn)
regAsSellerBtn = rootView.findViewById(R.id.regAsSellerBtn)
settingsBtn = rootView.findViewById(R.id.settingsBtn)
connectBtn = rootView.findViewById(R.id.connectBtn)
aboutUsBtn = rootView.findViewById(R.id.aboutUsBtn)
signoutBtn = rootView.findViewById(R.id.signOutBtn)
exitBtn = rootView.findViewById(R.id.exitBtn)
socialLayouts = rootView.findViewById(R.id.socialLayout)
facebook = rootView.findViewById(R.id.facebook)
instagram = rootView.findViewById(R.id.instagram)
whatsapp = rootView.findViewById(R.id.whatsapp)
profileImgLoad = rootView.findViewById(R.id.profileImgLoading)
setProfileImage()
prefManager = ApplicationPrefs()
if (prefManager.isRegisterAsSellerHidden()) {
regAsSellerBtn.visibility = View.GONE
}
setGreetText()
mainScroll.viewTreeObserver.addOnScrollChangedListener {
if (mainScroll.scrollY == 0) {
editProfileBtn.visibility = View.VISIBLE
} else {
editProfileBtn.visibility = View.INVISIBLE
}
}
editProfileBtn.setOnClickListener { view ->
Navigation.findNavController(
view
).navigate(R.id.action_homeFragment_to_editProfileFragment)
}
signoutBtn.setOnClickListener {
mAuth.signOut()
val intent = Intent(requireActivity(), AuthenticationActivity::class.java)
startActivity(intent)
}
shopBtn.setOnClickListener { view ->
Navigation.findNavController(
view
).navigate(R.id.action_homeFragment_to_shopNow)
(requireActivity() as
AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(
false
)
}
regAsSellerBtn.setOnClickListener { view ->
user.reload()
if(user.isEmailVerified){
Navigation.findNavController(
view
).navigate(R.id.action_homeFragment_to_sellerRegistration)
}else{
AlertDialog.Builder(this.requireActivity())
.setIcon(R.drawable.ic_baseline_new_releases_24)
.setTitle("Email Not Verified!")
.setMessage("You Must Verify Your Email To Register As Seller.")
.setPositiveButton("Verify Now"
) { _, _ ->
Navigation.findNavController(
view
).navigate(R.id.action_homeFragment_to_editProfileFragment)
}
.setNegativeButton("Cancel", null)
.show()
}
(requireActivity() as
AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(
false
)
}
settingsBtn.setOnClickListener { view ->
Navigation.findNavController(
view
).navigate(R.id.action_homeFragment_to_settings)
(requireActivity() as
AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(
false
)
}
connectBtn.setOnClickListener {
val less =
requireContext().resources.getDrawable(R.drawable.ic_baseline_expand_less_24)
val more =
requireContext().resources.getDrawable(R.drawable.ic_baseline_expand_more_24)
if (socialLayouts.visibility == View.GONE){
connectBtn.setCompoundDrawablesWithIntrinsicBounds(null, null, less, null)
socialLayouts.visibility = View.VISIBLE
connectBtn.setBackgroundResource(R.drawable.connect_btn_border)
}else if (socialLayouts.visibility == View.VISIBLE){
connectBtn.setCompoundDrawablesWithIntrinsicBounds(null, null, more, null)
socialLayouts.visibility = View.GONE
connectBtn.setBackgroundResource(R.drawable.btn_border)
}
}
facebook.setOnClickListener {
likeIng.setPackage("com.instagram.android")
try {
startActivity(likeIng)
} catch (e: ActivityNotFoundException) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.instagram.com/mymurlipura/")
)
)
}
}
whatsapp.setOnClickListener {
val contact = "+91 7611947535"
return rootView
}
@SuppressLint("SimpleDateFormat")
private fun setGreetText() {
val cal: Calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+5:30"))
val currentLocalTime: Date = cal.time
val date: DateFormat = SimpleDateFormat("HH:mm:ss")
date.timeZone = TimeZone.getTimeZone("GMT+5:30")
val localTime: String = date.format(currentLocalTime)
greet.text = localTime
if(localTime > "05:00:00" && localTime <= "12:00:00"){
greet.text = getString(R.string.good_morning_greet)
}else if(localTime > "12:00:00" && localTime <= "17:00:00"){
greet.text = getString(R.string.good_afternoon_greet)
}else if(localTime > "17:00:00" && localTime <= "21:00:00"){
greet.text = getString(R.string.good_evening_greet)
}else if(localTime > "21:00:00" && localTime <= "24:00:00"){
greet.text = getString(R.string.good_night_greet)
}else if(localTime > "00:00:00" && localTime <= "05:00:00"){
greet.text = getString(R.string.good_night_greet)
}
}
3. SellerRegistration.kt
package com.mymurlipura
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.*
import 31ndroid.appcompat.app.AppCompatActivity
import 31ndroid.fragment.app.Fragment
import 31ndroid.navigation.Navigation
import 31ndroid.navigation.fragment.findNavController
import br.com.simplepass.loadingbutton.customViews.CircularProgressButton
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.textfield.TextInputEditText
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.firestore.DocumentReference
import com.google.firebase.firestore.FirebaseFirestore
import com.mymurlipura.mangers.ApplicationPrefs
import com.mymurlipura.mangers.DetectConnection
import com.mymurlipura.mangers.SellerManager
import java.text.SimpleDateFormat
import java.util.*
import java.util.regex.Matcher
import java.util.regex.Pattern
@Suppress(“NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS”)
class SellerRegistration : Fragment() {
@SuppressLint(“RestrictedApi”, “SetJavaScriptEnabled”)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
(requireActivity() as
AppCompatActivity).supportActionBar?.setShowHideAnimationEnabled(false)
(requireActivity() as AppCompatActivity).supportActionBar?.hide()
val sellerRegView = inflater.inflate(R.layout.fragment_seller_registration, container,
false)
closeSellerRegBtn = sellerRegView.findViewById(R.id.closeSellerRegBtn)
sellerRegBackBtn = sellerRegView.findViewById(R.id.sellerRegBackBtn)
etName = sellerRegView.findViewById(R.id.name)
etEmail = sellerRegView.findViewById(R.id.email)
etAddress = sellerRegView.findViewById(R.id.address)
etPhone = sellerRegView.findViewById(R.id.phone_no)
etPinCode = sellerRegView.findViewById(R.id.pin_code)
stepAhead = sellerRegView.findViewById(R.id.stepAheadBtn)
basicInfoLayout = sellerRegView.findViewById(R.id.basicInfoLayout)
otherInfoLayout = sellerRegView.findViewById(R.id.otherInfoLayout)
notice = sellerRegView.findViewById(R.id.notice)
offlineBtn = sellerRegView.findViewById(R.id.offlineBtn)
onlineBtn = sellerRegView.findViewById(R.id.onlineBtn)
dairyProducts = sellerRegView.findViewById(R.id.dairyProducts)
fruitsAndVegetable =sellerRegView.findViewById(R.id.fruitsAndVegetables)
grocery = sellerRegView.findViewById(R.id.grocery)
electronics = sellerRegView.findViewById(R.id.electronics)
medicines = sellerRegView.findViewById(R.id.medicines)
others = sellerRegView.findViewById(R.id.others)
etOthers = sellerRegView.findViewById(R.id.othersEt)
registerBtn = sellerRegView.findViewById(R.id.registerBtn)
registerProgress = sellerRegView.findViewById(R.id.registerProgress)
stepAhead.setOnClickListener {
if (checkFields()) {
sellerRegBackBtn.isEnabled = true
sellerRegBackBtn.alpha = 1F
basicInfoLayout.visibility = View.INVISIBLE
otherInfoLayout.visibility = View.VISIBLE
hideKeyboard()
}
}
others.setOnCheckedChangeListener { _, _ ->
if (others.isChecked) {
etOthers.visibility = View.VISIBLE
} else if (!others.isChecked) {
etOthers.visibility = View.INVISIBLE
}
}
notice.setOnClickListener {
val snackbar = Snackbar.make(sellerRegView, “Your Default Profile Email Will
Be Used For Your Seller Account Itself”, Snackbar.LENGTH_LONG)
snackbar.show()
}
registerBtn.setOnClickListener {
val name = etName.text.toString().trim()
val email = etEmail.text.toString().trim()
val address = etAddress.text.toString().trim()
val phone = etPhone.text.toString().trim()
val pinCode = etPinCode.text.toString().trim()
val today = Date()
val format = SimpleDateFormat(“dd-MM-yyyy, hh:mm:ss a”)
val dateToStr: String = format.format(today)
val dateAndNumber = “$phone, $dateToStr”
var mode = “”
if (offlineBtn.isChecked) {
mode = “Offline”
} else if (onlineBtn.isChecked) {
mode = “Online”
}
var productsAndServices = “”
var isNotFirst = false
if (dairyProducts.isChecked) {
productsAndServices += “DairyProducts”
isNotFirst = true
}
if (fruitsAndVegetable.isChecked) {
if (isNotFirst)
productsAndServices += “, “
productsAndServices += “Fruits And Vegetables”
isNotFirst = true
}
if (grocery.isChecked) {
if (isNotFirst)
productsAndServices += “, “
productsAndServices += “Grocery”
isNotFirst = true
}
if (electronics.isChecked) {
if (isNotFirst)
productsAndServices += “, “
productsAndServices += “Electronics”
isNotFirst = true
}
if (medicines.isChecked) {
if (isNotFirst)
productsAndServices += “, “
productsAndServices += “Medicines”
isNotFirst = true
}
if (others.isChecked) {
if (isNotFirst)
productsAndServices += “, “
productsAndServices += etOthers.text
}
if
(!DetectConnection.checkInternetConnection((requireActivity().applicationContext))) {
val dialogView: View = inflater.inflate(R.layout.net_error_dialog, null)
val dialogCloseButton =
dialogView.findViewById<Button>(R.id.dialogCloseButton)
val builder: android.app.AlertDialog.Builder =
android.app.AlertDialog.Builder(activity)
builder.setView(dialogView)
builder.setCancelable(false)
val alert: android.app.AlertDialog = builder.create()
alert.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
alert.show()
dialogCloseButton.setOnClickListener {
alert.cancel()
}
} else {
if (checkOtherFields()) {
registerBtn.visibility = View.GONE
registerProgress.visibility = View.VISIBLE
rootNode = FirebaseDatabase.getInstance()
reference = rootNode.getReference(“Sellers”)
val user = SellerManager(
name,
email,
address,
phone,
pinCode,
mode,
productsAndServices
)
reference.child(dateAndNumber).setValue(user)
.addOnSuccessListener {
prefManager = ApplicationPrefs()
val dialogView: View =
inflater.inflate(R.layout.reg_successful_dialog, null)
val dialogRemoveButton =
dialogView.findViewById<Button>(R.id.removeBtn)
val dialogKeepButton =
dialogView.findViewById<Button>(R.id.keepBtn)
val builder: android.app.AlertDialog.Builder =
android.app.AlertDialog.Builder(activity)
builder.setView(dialogView)
builder.setCancelable(false)
registerProgress.visibility = View.GONE
registerBtn.visibility = View.VISIBLE
val alert: android.app.AlertDialog = builder.create()
alert.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
alert.show()
dialogRemoveButton.setOnClickListener {
prefManager.hideRegisteredAsSeller(true)
view?.let { it1 ->
Navigation.findNavController(
it1
).navigate(R.id.action_sellerRegistration_to_homeFragment)
alert.cancel()
}
}
dialogKeepButton.setOnClickListener {
prefManager.hideRegisteredAsSeller(false)
view?.let { it1 ->
Navigation.findNavController(
it1
).navigate(R.id.action_sellerRegistration_to_homeFragment)
alert.cancel()
}
}
}.addOnFailureListener {
Toast.makeText(
this.requireActivity(),
“Registration Failed”,
Toast.LENGTH_SHORT
).show()
}
}
}
}
closeSellerRegBtn.setOnClickListener {
findNavController().popBackStack()
}
sellerRegBackBtn.setOnClickListener {
otherInfoLayout.visibility = View.INVISIBLE
basicInfoLayout.visibility = View.VISIBLE
sellerRegBackBtn.isEnabled = false
sellerRegBackBtn.alpha = 0.5F
}
return sellerRegView
}
LOGIN PAGE
SIGN UP PAGE
Step I Step II
7.1.8 SETTINGS
7.1.11 QUERY
7.2 FIREBASE DATABASE SCREENSHOTS
7.2.1 AUTHENTICATION
https://www.youtube.com/channel/UCB2B0AuQgk6eOMbWR7qiqew
https://www.youtube.com/watch?v=tbh9YaWPKKs
https://developer.android.com/kotlin/kotlin-java-resources
https://github.com/arsltech/Github-WebView-Android-App
https://www.javatpoint.com/android-hide-title-bar-example