diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..4e892f3
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,56 @@
+plugins {
+ id 'com.android.application'
+ id 'org.jetbrains.kotlin.android'
+ id 'kotlin-android-extensions'
+ id 'kotlin-kapt'
+}
+
+android {
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "com.example.androiduidesign"
+ minSdk 21
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+ dataBinding {
+ enabled = true
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.6.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ implementation 'androidx.databinding:databinding-runtime:7.1.3'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ //Splash Screen
+ implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
+ //SSP
+ implementation 'com.intuit.ssp:ssp-android:1.0.6'
+ //SDP
+ implementation 'com.intuit.sdp:sdp-android:1.0.6'
+ implementation "androidx.fragment:fragment-ktx:1.4.1"
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# 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
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/example/androiduidesign/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/example/androiduidesign/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..2991c3a
--- /dev/null
+++ b/app/src/androidTest/java/com/example/androiduidesign/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.example.androiduidesign
+
+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.example.androiduidesign", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..5382871
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/MainActivity.kt b/app/src/main/java/com/example/androiduidesign/MainActivity.kt
new file mode 100644
index 0000000..62bf366
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/MainActivity.kt
@@ -0,0 +1,11 @@
+package com.example.androiduidesign
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+
+class MainActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/SplashScreenActivity.kt b/app/src/main/java/com/example/androiduidesign/SplashScreenActivity.kt
new file mode 100644
index 0000000..a166aa3
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/SplashScreenActivity.kt
@@ -0,0 +1,31 @@
+package com.example.androiduidesign
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.WindowManager
+import com.example.androiduidesign.onboardingscreen.OnBoardingActivity
+import com.example.androiduidesign.utils.TWOTHOUSAND
+
+class SplashScreenActivity : AppCompatActivity() {
+ lateinit var handler : Handler
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_splash_screen)
+
+ handler = Handler(Looper.getMainLooper())
+ handler.postDelayed({
+ startActivity(Intent(this,OnBoardingActivity::class.java))
+ finish()
+ }, TWOTHOUSAND.toLong())
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ handler.removeCallbacksAndMessages(null)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/ForgetPasswordActivity.kt b/app/src/main/java/com/example/androiduidesign/authentication/ForgetPasswordActivity.kt
new file mode 100644
index 0000000..9043713
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/ForgetPasswordActivity.kt
@@ -0,0 +1,88 @@
+package com.example.androiduidesign.authentication
+
+import android.content.Intent
+import android.os.Bundle
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.TextPaint
+import android.text.method.LinkMovementMethod
+import android.text.style.ClickableSpan
+import android.view.View
+import android.view.WindowManager
+import androidx.activity.viewModels
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.databinding.DataBindingUtil
+import com.example.androiduidesign.R
+import com.example.androiduidesign.databinding.ActivityForgetPasswordBinding
+import com.example.androiduidesign.utils.THIRTYEIGHT
+import com.example.androiduidesign.utils.THIRTYONE
+import com.example.androiduidesign.utils.getSpannable
+import kotlinx.android.synthetic.main.activity_forget_password.img_view_back_arrow_forget_password
+
+class ForgetPasswordActivity : AppCompatActivity() ,View.OnClickListener{
+ lateinit var binding: ActivityForgetPasswordBinding
+ val forgetPasswordViewModel : ForgetPasswordViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ initialSetup()
+
+ binding.apply {
+ checkBoxEmail.setOnCheckedChangeListener { _, value ->
+ checkBoxEmail.isChecked = value
+ checkBoxPhone.isChecked = !value
+ }
+ checkBoxPhone.setOnCheckedChangeListener { _, value ->
+ checkBoxPhone.isChecked = value
+ checkBoxEmail.isChecked = !value
+ }
+ btnSendCodeForgetPassword.setOnClickListener {
+ startActivity(Intent(this@ForgetPasswordActivity, VerficationScreenActivity::class.java))
+ finish()
+ }
+ img_view_back_arrow_forget_password.setOnClickListener {
+ startActivity(Intent(this@ForgetPasswordActivity, SignInActivity::class.java))
+ finish()
+ }
+ }
+ }
+
+ private fun initialSetup() {
+ supportActionBar?.hide()
+ binding = DataBindingUtil.setContentView(this,R.layout.activity_forget_password)
+ setSpannableText()
+ binding.apply {
+ viewModel = forgetPasswordViewModel
+ lifecycleOwner = this@ForgetPasswordActivity
+ onClickHandler = this@ForgetPasswordActivity
+
+ }
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ }
+
+ private fun setSpannableText() {
+ val spannable = getSpannable(binding.textviewHaveAccountForgetPassword.text.toString(), THIRTYONE, THIRTYEIGHT, ContextCompat.getColor(this@ForgetPasswordActivity, R.color.green_500)) {
+ val forgetPasswordIntent = Intent(this@ForgetPasswordActivity,SignInActivity::class.java)
+ startActivity(forgetPasswordIntent)
+ finish()
+ }
+ binding.textviewHaveAccountForgetPassword.text = spannable
+ binding.textviewHaveAccountForgetPassword.movementMethod = LinkMovementMethod.getInstance()
+ }
+
+ override fun onClick(p0: View?) {
+ when (p0?.id){
+ R.id.img_view_email_icon_forget_password,R.id.txt_view_email_header_forget_password,R.id.txt_view_email_forget_password -> {
+ binding.apply {
+ checkBoxEmail.isChecked = !checkBoxEmail.isChecked
+ }
+ }
+ R.id.img_view_phone_icon_forget_password,R.id.txt_view_phone_header_forget_password,R.id.txt_view_phone_forget_password -> {
+ binding.apply {
+ checkBoxPhone.isChecked = !checkBoxPhone.isChecked
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/ForgetPasswordViewModel.kt b/app/src/main/java/com/example/androiduidesign/authentication/ForgetPasswordViewModel.kt
new file mode 100644
index 0000000..9dda014
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/ForgetPasswordViewModel.kt
@@ -0,0 +1,15 @@
+package com.example.androiduidesign.authentication
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+class ForgetPasswordViewModel:ViewModel() {
+
+ val emailstatus : MutableLiveData = MutableLiveData(true)
+ val passwordStatus: MutableLiveData = MutableLiveData()
+
+ fun updatePassword(isEmailCheckd: Boolean){
+ emailstatus.value = isEmailCheckd
+ passwordStatus.value = !isEmailCheckd
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/SignInActivity.kt b/app/src/main/java/com/example/androiduidesign/authentication/SignInActivity.kt
new file mode 100644
index 0000000..0a7ceab
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/SignInActivity.kt
@@ -0,0 +1,82 @@
+package com.example.androiduidesign.authentication
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.TextPaint
+import android.text.method.LinkMovementMethod
+import android.text.style.ClickableSpan
+import android.util.Patterns
+import android.view.View
+import android.view.WindowManager
+import android.widget.Toast
+import androidx.core.content.ContextCompat
+import androidx.databinding.DataBindingUtil
+import com.example.androiduidesign.R
+import com.example.androiduidesign.dashboard.HomeScreenActivity
+import com.example.androiduidesign.databinding.ActivitySignInBinding
+import com.example.androiduidesign.utils.THIRTYEIGHT
+import com.example.androiduidesign.utils.THIRTYONE
+import com.example.androiduidesign.utils.TWENETYFOUR
+import com.example.androiduidesign.utils.getSpannable
+
+class SignInActivity : AppCompatActivity() {
+ lateinit var binding: ActivitySignInBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ initialSetup()
+ binding.apply {
+ textviewNotHaveAccount.setOnClickListener {
+ startActivity(Intent(this@SignInActivity,SignupActivity::class.java))
+ }
+ btnSignIn.setOnClickListener {
+ when {
+ ediTxtSignInEmail.text.toString().isEmpty() -> {
+ Toast.makeText(this@SignInActivity,getString(R.string.toast_email_empty), Toast.LENGTH_SHORT).show()
+ }
+ editxtSignInPassword.text.toString().isEmpty() -> {
+ Toast.makeText(this@SignInActivity,getString(R.string.toast_password_empty),Toast.LENGTH_SHORT).show()
+ }
+ !Patterns.EMAIL_ADDRESS.matcher(ediTxtSignInEmail.text.toString()).matches() -> {
+ Toast.makeText(this@SignInActivity,getString(R.string.toast_email_not_valid),Toast.LENGTH_SHORT).show()
+ }
+ else -> {
+ startActivity(Intent(this@SignInActivity,HomeScreenActivity::class.java))
+ }
+ }
+ }
+ btnFaceId.setOnClickListener {
+ Toast.makeText(this@SignInActivity,getString(R.string.face_id_clicked),Toast.LENGTH_SHORT).show()
+ }
+ btnFacebook.setOnClickListener {
+ Toast.makeText(this@SignInActivity,getString(R.string.facebook_clicked),Toast.LENGTH_SHORT).show()
+ }
+ btnGoogle.setOnClickListener {
+ Toast.makeText(this@SignInActivity,getString(R.string.google_clicked),Toast.LENGTH_SHORT).show()
+ }
+ textviewForgetPassword.setOnClickListener {
+ startActivity(Intent(this@SignInActivity,ForgetPasswordActivity::class.java))
+ }
+ }
+ }
+
+
+ private fun setSpannableText() {
+ val spannable = getSpannable(binding.textviewNotHaveAccount.text.toString(), TWENETYFOUR, THIRTYONE, ContextCompat.getColor(this@SignInActivity, R.color.green_500)) {
+ val signInIntent = Intent(this@SignInActivity,SignupActivity::class.java)
+ startActivity(signInIntent)
+ }
+ binding.textviewNotHaveAccount.text = spannable
+ binding.textviewNotHaveAccount.movementMethod = LinkMovementMethod.getInstance()
+ }
+
+ private fun initialSetup() {
+ supportActionBar?.hide()
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_sign_in)
+ setSpannableText()
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/SignupActivity.kt b/app/src/main/java/com/example/androiduidesign/authentication/SignupActivity.kt
new file mode 100644
index 0000000..1b4a090
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/SignupActivity.kt
@@ -0,0 +1,93 @@
+package com.example.androiduidesign.authentication
+
+import android.content.Intent
+import android.os.Bundle
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.TextPaint
+import android.text.method.LinkMovementMethod
+import android.text.style.ClickableSpan
+import android.util.Patterns
+import android.view.View
+import android.view.WindowManager
+import android.widget.ArrayAdapter
+import android.widget.Toast
+import androidx.activity.viewModels
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.databinding.DataBindingUtil
+import com.example.androiduidesign.R
+import com.example.androiduidesign.databinding.ActivitySignupBinding
+import com.example.androiduidesign.utils.NINETEEN
+import com.example.androiduidesign.utils.ONE
+import com.example.androiduidesign.utils.THIRTYONE
+import com.example.androiduidesign.utils.TWENETYFOUR
+import com.example.androiduidesign.utils.TWENTYSIX
+import com.example.androiduidesign.utils.ZERO
+import com.example.androiduidesign.utils.getSpannable
+import com.example.androiduidesign.utils.showMessage
+import kotlinx.android.synthetic.main.activity_signup.btn_signup
+import kotlinx.android.synthetic.main.activity_signup.img_view_back_arrow
+
+
+class SignupActivity : AppCompatActivity() {
+ lateinit var binding: ActivitySignupBinding
+ val signupViewModel : SignupViewModel by viewModels()
+ lateinit var adapter: ArrayAdapter
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ intialSetup()
+ img_view_back_arrow.setOnClickListener {
+ startActivity(Intent(this, SignInActivity::class.java))
+ finish()
+ }
+ btn_signup.setOnClickListener {
+ signupViewModel.performValidation()
+ }
+ signupViewModel.logInResult.observe(this){ result ->
+ showMessage(this,result)
+ }
+ signupViewModel.password.observe(this) { password ->
+ password.apply {
+ if (isNotEmpty()) {
+ var passwordStatusUpdate = ONE
+ if (length >= 8) {
+ if (toString().contains(getString(R.string.numeric_regex).toRegex())) {
+ passwordStatusUpdate += ONE
+ }
+ if (toString().contains(getString(R.string.small_alphabet_regex).toRegex())) {
+ passwordStatusUpdate += ONE
+ }
+ if (toString().contains(getString(R.string.upper_alphabet_regex).toRegex())) {
+ passwordStatusUpdate += ONE
+ }
+ }
+ signupViewModel.passwordStatus.value = passwordStatusUpdate
+ } else {
+ signupViewModel.passwordStatus.value = ZERO
+ }
+ }
+ }
+ }
+
+ private fun intialSetup() {
+ supportActionBar?.hide()
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_signup)
+ adapter = ArrayAdapter.createFromResource(this, R.array.countryCodes, android.R.layout.simple_spinner_dropdown_item)
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
+ binding.apply {
+ viewModel = signupViewModel
+ spinnerCountryCode.adapter = adapter
+ lifecycleOwner = this@SignupActivity
+ }
+ setSpannableText()
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ }
+
+ private fun setSpannableText() {
+ val spannable = getSpannable(binding.textviewNotHaveAccount.text.toString(), NINETEEN, TWENTYSIX, ContextCompat.getColor(this@SignupActivity, R.color.green_500)) {}
+ binding.textviewNotHaveAccount.text = spannable
+ binding.textviewNotHaveAccount.movementMethod = LinkMovementMethod.getInstance()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/SignupViewModel.kt b/app/src/main/java/com/example/androiduidesign/authentication/SignupViewModel.kt
new file mode 100644
index 0000000..3ad1bc1
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/SignupViewModel.kt
@@ -0,0 +1,47 @@
+package com.example.androiduidesign.authentication
+
+import android.app.Application
+import android.util.Patterns
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import com.example.androiduidesign.R
+
+class SignupViewModel(application: Application) : AndroidViewModel(application) {
+ val passwordStatus : MutableLiveData = MutableLiveData(0)
+ val password :MutableLiveData = MutableLiveData()
+ val cpassword : MutableLiveData = MutableLiveData()
+ val logInResult = MutableLiveData()
+ fun getLogInResult(): LiveData = logInResult
+ var email: MutableLiveData = MutableLiveData()
+ var name: MutableLiveData = MutableLiveData()
+ var mobileNo: MutableLiveData = MutableLiveData()
+
+ fun performValidation() {
+ if (email.value.isNullOrEmpty()) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_email_empty)
+ return
+ } else if (mobileNo.value.isNullOrEmpty()) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_phone_empty)
+ return
+ } else if (name.value.isNullOrEmpty()) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_name_empty)
+ return
+ } else if (mobileNo.value?.length ?: 10 < 10) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_valid_phone)
+ return
+ } else if (!Patterns.EMAIL_ADDRESS.matcher(email.value).matches()) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_email_not_valid)
+ return
+ } else if (password.value.isNullOrEmpty()) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_password_empty)
+ }else if(cpassword.value.isNullOrEmpty()) {
+ logInResult.value = getApplication().resources.getString(R.string.toast_confirm_password)
+ } else if (passwordStatus.value != 4){
+ logInResult.value = getApplication().resources.getString(R.string.password_should_strong)
+ } else {
+ logInResult.value = getApplication().resources.getString(R.string.signup_btn_clicked)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/VerficationScreenActivity.kt b/app/src/main/java/com/example/androiduidesign/authentication/VerficationScreenActivity.kt
new file mode 100644
index 0000000..6b2743d
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/VerficationScreenActivity.kt
@@ -0,0 +1,119 @@
+package com.example.androiduidesign.authentication
+
+import android.content.Context
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.text.method.LinkMovementMethod
+import android.view.WindowManager
+import android.view.inputmethod.InputMethodManager
+import android.widget.Toast
+import androidx.activity.viewModels
+import androidx.core.content.ContextCompat
+import androidx.databinding.DataBindingUtil
+import com.example.androiduidesign.R
+import com.example.androiduidesign.databinding.ActivityVerficationScreenBinding
+import com.example.androiduidesign.utils.NINETEEN
+import com.example.androiduidesign.utils.THIRTYTHREE
+import com.example.androiduidesign.utils.TWENTY
+import com.example.androiduidesign.utils.TWENTYSIX
+import com.example.androiduidesign.utils.getSpannable
+import kotlinx.android.synthetic.main.activity_verfication_screen.edit_text_otp_four
+import kotlinx.android.synthetic.main.activity_verfication_screen.edit_text_otp_one
+import kotlinx.android.synthetic.main.activity_verfication_screen.edit_text_otp_three
+import kotlinx.android.synthetic.main.activity_verfication_screen.edit_text_otp_two
+
+class VerficationScreenActivity : AppCompatActivity() {
+ lateinit var binding: ActivityVerficationScreenBinding
+ val verficationViewModel: VerificationViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_verfication_screen)
+ initialSetup()
+
+ verficationViewModel.editTextOne.observe(this) {
+ if (it.length == 1) {
+ binding.editTextOtpTwo.requestFocus()
+ }
+ }
+ verficationViewModel.editTextTwo.observe(this) {
+ if (it.length == 1) {
+ binding.editTextOtpThree.requestFocus()
+ }
+ if (it.isEmpty()) {
+ binding.editTextOtpOne.requestFocus()
+ }
+ }
+ verficationViewModel.editTextThree.observe(this) {
+ if (it.length == 1) {
+ binding.editTextOtpFour.requestFocus()
+ }
+ if (it.isEmpty()) {
+ binding.editTextOtpTwo.requestFocus()
+ }
+ }
+ verficationViewModel.editTextFour.observe(this) {
+ if (it.length == 1) {
+ binding.editTextOtpFour.clearFocus()
+ val hidekeyboard = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
+ hidekeyboard?.hideSoftInputFromWindow(binding.editTextOtpFour.windowToken, 0)
+ }
+ if (it.isEmpty()) {
+ binding.editTextOtpThree.requestFocus()
+ }
+ }
+ binding.imgViewBackArrowOtp.setOnClickListener {
+ startActivity(Intent(this@VerficationScreenActivity, ForgetPasswordActivity::class.java))
+ finish()
+ }
+ binding.btnVerify.setOnClickListener {
+ if (edit_text_otp_one.text.toString().isEmpty() || edit_text_otp_two.text.toString().isEmpty() || edit_text_otp_three.text.toString().isEmpty()|| edit_text_otp_four.text.toString().isEmpty()){
+ Toast.makeText(this,getString(R.string.toast_enter_otp),Toast.LENGTH_SHORT).show()
+ } else {
+ Toast.makeText(this,getString(R.string.toast_verfication_button_tapped),Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ private fun initialSetup() {
+ supportActionBar?.hide()
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_verfication_screen)
+ setSpannableText()
+ binding.apply {
+ viewModel = verficationViewModel
+ lifecycleOwner = this@VerficationScreenActivity
+ }
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ countDownTimer()
+ }
+
+ private fun countDownTimer() {
+ object : CountDownTimer(60000, 1000) {
+
+ override fun onTick(millisUntilFinished: Long) {
+ val m = (millisUntilFinished / 1000) / 60
+ val s = (millisUntilFinished / 1000) % 60
+ val format = String.format(getString(R.string.otp_time_format), m, s)
+ binding.textViewTextResendCode.text = getString(R.string.text_resend_code,format)
+ }
+
+ override fun onFinish() {
+ binding.textViewTextResendCode.text = getString(R.string.text_otp_time_finish)
+ }
+ }.start()
+ }
+
+
+
+ private fun setSpannableText() {
+ val spannable = getSpannable(binding.textviewUpdateNumber.text.toString(), TWENTY, THIRTYTHREE, ContextCompat.getColor(this@VerficationScreenActivity, R.color.green_500)) {
+ val signInIntent = Intent(this@VerficationScreenActivity, ForgetPasswordActivity::class.java)
+ startActivity(signInIntent)
+ finish()
+ }
+ binding.textviewUpdateNumber.text = spannable
+ binding.textviewUpdateNumber.movementMethod = LinkMovementMethod.getInstance()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/authentication/VerificationViewModel.kt b/app/src/main/java/com/example/androiduidesign/authentication/VerificationViewModel.kt
new file mode 100644
index 0000000..48be1aa
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/authentication/VerificationViewModel.kt
@@ -0,0 +1,11 @@
+package com.example.androiduidesign.authentication
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+class VerificationViewModel : ViewModel() {
+ val editTextOne : MutableLiveData = MutableLiveData()
+ val editTextTwo : MutableLiveData = MutableLiveData()
+ val editTextThree : MutableLiveData = MutableLiveData()
+ val editTextFour : MutableLiveData = MutableLiveData()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/bindingAdapters.kt b/app/src/main/java/com/example/androiduidesign/bindingAdapters.kt
new file mode 100644
index 0000000..0b0e051
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/bindingAdapters.kt
@@ -0,0 +1,9 @@
+package com.example.androiduidesign
+
+import android.widget.ImageView
+import androidx.databinding.BindingAdapter
+
+@BindingAdapter("android:src")
+fun setImageViewResource(imageView: ImageView, resource: Int) {
+ imageView.setImageResource(resource)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/CategoriesItemModel.kt b/app/src/main/java/com/example/androiduidesign/dashboard/CategoriesItemModel.kt
new file mode 100644
index 0000000..572cc28
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/CategoriesItemModel.kt
@@ -0,0 +1,4 @@
+package com.example.androiduidesign.dashboard
+
+class CategoriesItemModel (val image: Int, val title: String) {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/DetailRecommendationModel.kt b/app/src/main/java/com/example/androiduidesign/dashboard/DetailRecommendationModel.kt
new file mode 100644
index 0000000..97ec78d
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/DetailRecommendationModel.kt
@@ -0,0 +1,22 @@
+package com.example.androiduidesign.dashboard
+
+class DetailRecommendationModel(
+ val viewType: Int,
+ val headerImage: Int?,
+ val headerTile: String?,
+ val headerDescription: String?,
+ val headerRating: String?,
+ val headerDistance: String?,
+ val headerTime: String?,
+ val sectionImage: Int?,
+ val sectionheader: String?,
+ val sectionDes: String?,
+ val sectionPrice: String?,
+ val quantity: String?
+){
+}
+
+enum class ItemType {
+ ITEM,
+ HEADER
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/DetaileRecommendationActivity.kt b/app/src/main/java/com/example/androiduidesign/dashboard/DetaileRecommendationActivity.kt
new file mode 100644
index 0000000..47dac77
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/DetaileRecommendationActivity.kt
@@ -0,0 +1,40 @@
+package com.example.androiduidesign.dashboard
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.view.WindowManager
+import androidx.databinding.DataBindingUtil
+import com.example.androiduidesign.R
+import com.example.androiduidesign.databinding.ActivityDetaileRecommendationBinding
+
+class DetaileRecommendationActivity : AppCompatActivity() {
+ lateinit var binding: ActivityDetaileRecommendationBinding
+ private var detailItemList: ArrayList = arrayListOf()
+ var detailRecommendationsadapter: detaileRecommendationAdapter? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ initialSetup()
+ }
+
+ private fun initialSetup() {
+ supportActionBar?.hide()
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_detaile_recommendation)
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ setAdapter()
+ }
+
+ private fun setAdapter() {
+ detailRecommendationsadapter = detaileRecommendationAdapter(mutableListOf().apply {
+ add(DetailRecommendationModel(1,null,null,null,null,null,null,R.drawable.recommendation_item_section_one,getString(R.string.text_family_package),getString(R.string.food_item_description),"\$12.00",getString(R.string.zero_quantity)))
+ add(DetailRecommendationModel(0,R.drawable.recommendation_res_header_one,getString(R.string.resturant_name_sample),getString(R.string.resurant_des_one),getString(R.string.four_five_rating),getString(R.string.zero_one_kelometer),getString(R.string.thirteen_minutes),null,null,null,null,null))
+ add(DetailRecommendationModel(0,R.drawable.recommendation_res_header_one,getString(R.string.resturant_name_sample),getString(R.string.resurant_des_one),getString(R.string.four_five_rating),getString(R.string.zero_one_kelometer),getString(R.string.thirteen_minutes),null,null,null,null,null))
+ add(DetailRecommendationModel(0,R.drawable.recommendation_res_header_one,getString(R.string.resturant_name_sample),getString(R.string.resurant_des_one),getString(R.string.four_five_rating),getString(R.string.zero_one_kelometer),getString(R.string.thirteen_minutes),null,null,null,null,null))
+ add(DetailRecommendationModel(0,R.drawable.recommendation_res_header_one,getString(R.string.resturant_name_sample),getString(R.string.resurant_des_one),getString(R.string.four_five_rating),getString(R.string.zero_one_kelometer),getString(R.string.thirteen_minutes),null,null,null,null,null))
+ add(DetailRecommendationModel(0,R.drawable.recommendation_res_header_one,getString(R.string.resturant_name_sample),getString(R.string.resurant_des_one),getString(R.string.four_five_rating),getString(R.string.zero_one_kelometer),getString(R.string.thirteen_minutes),null,null,null,null,null))
+ add(DetailRecommendationModel(0,R.drawable.recommendation_res_header_one,getString(R.string.resturant_name_sample),getString(R.string.resurant_des_one),getString(R.string.four_five_rating),getString(R.string.zero_one_kelometer),getString(R.string.thirteen_minutes),null,null,null,null,null))
+ })
+ binding.recyclerviewDeatilRecommendation.adapter = detailRecommendationsadapter
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/DiscountItemModel.kt b/app/src/main/java/com/example/androiduidesign/dashboard/DiscountItemModel.kt
new file mode 100644
index 0000000..dde1925
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/DiscountItemModel.kt
@@ -0,0 +1,4 @@
+package com.example.androiduidesign.dashboard
+
+class DiscountItemModel(val image: Int) {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/HomeScreenActivity.kt b/app/src/main/java/com/example/androiduidesign/dashboard/HomeScreenActivity.kt
new file mode 100644
index 0000000..b4af93b
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/HomeScreenActivity.kt
@@ -0,0 +1,89 @@
+package com.example.androiduidesign.dashboard
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.view.View
+import android.view.WindowManager
+import android.widget.Toast
+import androidx.databinding.DataBindingUtil
+import com.example.androiduidesign.R
+import com.example.androiduidesign.databinding.ActivityHomeScreenBinding
+
+class HomeScreenActivity : AppCompatActivity(),View.OnClickListener{
+ lateinit var binding: ActivityHomeScreenBinding
+ private var categoriesItemList: ArrayList = arrayListOf()
+ var categoriesadapter: categoriesAdapter? = null
+ var recommendationItemList: ArrayList = arrayListOf()
+ var recommendationadapter: recommendationAdapter? = null
+ var discountItemList: ArrayList = arrayListOf()
+ var discountadapter: discountAdapter? = null
+ var foodCategoriesadapter: foodCategoriesAdapter? = null
+ var cateegoriesItemListTakasimuraaa :ArrayList = arrayListOf()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ initialSetup()
+ }
+
+ private fun initialSetup() {
+ supportActionBar?.hide()
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_home_screen)
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ setAdapter()
+ binding.onClickHandler = this@HomeScreenActivity
+
+ }
+
+ private fun setAdapter() {
+ setData()
+ categoriesadapter = categoriesAdapter(categoriesItemList)
+ binding.recyclerviewCategories.adapter = categoriesadapter
+ recommendationadapter = recommendationAdapter(recommendationItemList)
+ binding.recyclerviewRecommendation.adapter = recommendationadapter
+ discountadapter = discountAdapter(discountItemList)
+ binding.recyclerviewDiscount.adapter = discountadapter
+ foodCategoriesadapter = foodCategoriesAdapter(cateegoriesItemListTakasimuraaa)
+ binding.recyclerviewCategoriesItemOne.adapter = foodCategoriesadapter
+ }
+
+ private fun setData() {
+ categoriesItemList.apply {
+ add(CategoriesItemModel(R.drawable.nearest_icon,"Nearest"))
+ add(CategoriesItemModel(R.drawable.new_food_icon,"New Foods"))
+ add(CategoriesItemModel(R.drawable.best_seller_icon,"Best Seller"))
+ add(CategoriesItemModel(R.drawable.healthy_icon,"Healthy"))
+ }
+ recommendationItemList.apply {
+ add(RecommendationItemModel(R.drawable.categories_item_two_image, getString(R.string.categories_item_two), getString(R.string.distance_1_02), getString(R.string.text_14_mins), getString(R.string.text_4_9_rating), getString(R.string.categories_item_one_rating), getString(R.string.text_discount_fifteen)))
+ add(RecommendationItemModel(R.drawable.categories_item_three_image, getString(R.string.categories_item_three), getString(R.string.distance_1_02), getString(R.string.text_14_mins), getString(R.string.text_4_9_rating), getString(R.string.categories_item_one_rating), getString(R.string.text_discount_fifteen)))
+ add(RecommendationItemModel(R.drawable.categories_item_one_image, getString(R.string.categories_title_one), getString(R.string.distance_1_02), getString(R.string.text_14_mins), getString(R.string.text_4_9_rating), getString(R.string.categories_item_one_rating), getString(R.string.text_discount_fifteen)))
+ }
+ discountItemList.apply {
+ add(DiscountItemModel(R.drawable.discount_item_one))
+ add(DiscountItemModel(R.drawable.discount_item_two))
+ }
+ cateegoriesItemListTakasimuraaa.apply {
+ add(RecommendationItemModel(R.drawable.categories_item_one_image, getString(R.string.categories_title_one), getString(R.string.distance_1_02), getString(R.string.text_14_mins), getString(R.string.text_4_9_rating), getString(R.string.categories_item_one_rating), getString(R.string.text_discount_fifteen)))
+ add(RecommendationItemModel(R.drawable.categories_item_two_image, getString(R.string.categories_item_two), getString(R.string.distance_1_02), getString(R.string.text_14_mins), getString(R.string.text_4_9_rating), getString(R.string.categories_item_one_rating), getString(R.string.text_discount_fifteen)))
+ add(RecommendationItemModel(R.drawable.categories_item_three_image, getString(R.string.categories_item_three), getString(R.string.distance_1_02), getString(R.string.text_14_mins), getString(R.string.text_4_9_rating), getString(R.string.categories_item_one_rating), getString(R.string.text_discount_fifteen)))
+ }
+
+ }
+
+ override fun onClick(p0: View?) {
+ when (p0?.id){
+ R.id.text_view_see_all -> {
+ startActivity(Intent(this@HomeScreenActivity,DetaileRecommendationActivity::class.java))
+ }
+ R.id.text_view_see_all_categories -> {
+ Toast.makeText(this@HomeScreenActivity,getString(R.string.toast_see_all_categories_clicked),Toast.LENGTH_SHORT).show()
+ }
+ R.id.img_view_plus,R.id.text_view_plus -> {
+ Toast.makeText(this@HomeScreenActivity,getString(R.string.toast_plus_button_tapped),Toast.LENGTH_SHORT).show()
+ }
+ R.id.img_view_pay,R.id.text_view_pay -> {
+ Toast.makeText(this@HomeScreenActivity,getString(R.string.toast_pay_button_tapped),Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/RecommendationItemModel.kt b/app/src/main/java/com/example/androiduidesign/dashboard/RecommendationItemModel.kt
new file mode 100644
index 0000000..20b1e66
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/RecommendationItemModel.kt
@@ -0,0 +1,4 @@
+package com.example.androiduidesign.dashboard
+
+class RecommendationItemModel (val image: Int, val name: String,val distance:String, val time:String, val stars:String, val rating:String,val discount:String) {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/categoriesAdapter.kt b/app/src/main/java/com/example/androiduidesign/dashboard/categoriesAdapter.kt
new file mode 100644
index 0000000..332e864
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/categoriesAdapter.kt
@@ -0,0 +1,30 @@
+package com.example.androiduidesign.dashboard
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.databinding.library.baseAdapters.BR
+import androidx.recyclerview.widget.RecyclerView
+import com.example.androiduidesign.databinding.CategoriesItemLayoutBinding
+
+class categoriesAdapter(private val CategoriesItems: ArrayList) :
+ RecyclerView.Adapter() {
+
+ class CategoriesViewHolder(private val binding: CategoriesItemLayoutBinding) : RecyclerView.ViewHolder(binding.root) {
+ fun bind(itemViewModel: CategoriesItemModel) {
+ binding.setVariable(BR.dataModel, itemViewModel)
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoriesViewHolder {
+ val binding = CategoriesItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return CategoriesViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: CategoriesViewHolder, position: Int) {
+ holder.bind(CategoriesItems[position])
+ }
+
+ override fun getItemCount(): Int {
+ return CategoriesItems.size
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/detaileRecommendationAdapter.kt b/app/src/main/java/com/example/androiduidesign/dashboard/detaileRecommendationAdapter.kt
new file mode 100644
index 0000000..9534e6b
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/detaileRecommendationAdapter.kt
@@ -0,0 +1,48 @@
+package com.example.androiduidesign.dashboard
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.lifecycle.LifecycleOwner
+import androidx.recyclerview.widget.RecyclerView
+import com.example.androiduidesign.databinding.CategoriesItemLayoutBinding
+import com.example.androiduidesign.databinding.RecommendationRestaurantsHeaderItemLayoutBinding
+import com.example.androiduidesign.databinding.RecommendationRestaurantsSectionItemLayoutBinding
+
+class detaileRecommendationAdapter(private val DetailRecommendationItems: List) : RecyclerView.Adapter() {
+ class ItemHolder(val binding: RecommendationRestaurantsHeaderItemLayoutBinding): RecyclerView.ViewHolder(binding.root)
+ class SectionHolder(val binding: RecommendationRestaurantsSectionItemLayoutBinding): RecyclerView.ViewHolder(binding.root)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ return when(viewType) {
+ 0 -> {
+ val headerBinding = RecommendationRestaurantsHeaderItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ ItemHolder(headerBinding)
+ }
+ else -> {
+ val sectionBinding = RecommendationRestaurantsSectionItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ SectionHolder(sectionBinding)
+ }
+ }
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ when(DetailRecommendationItems[position].viewType) {
+ 0 -> {
+ (holder as ItemHolder).binding.viewModel = DetailRecommendationItems[position]
+ }
+ else -> {
+ (holder as SectionHolder).binding.viewModel = DetailRecommendationItems[position]
+ }
+ }
+ }
+
+ override fun getItemCount(): Int {
+ return DetailRecommendationItems.size
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ return DetailRecommendationItems[position].viewType
+ }
+}
+
+
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/discountAdapter.kt b/app/src/main/java/com/example/androiduidesign/dashboard/discountAdapter.kt
new file mode 100644
index 0000000..0ad1def
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/discountAdapter.kt
@@ -0,0 +1,31 @@
+package com.example.androiduidesign.dashboard
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.databinding.library.baseAdapters.BR
+import androidx.recyclerview.widget.RecyclerView
+import com.example.androiduidesign.databinding.DiscountItemLayoutBinding
+
+class discountAdapter(private val DiscountItems: ArrayList) :
+ RecyclerView.Adapter() {
+
+ class DiscountViewHolder(private val binding: DiscountItemLayoutBinding) :
+ RecyclerView.ViewHolder(binding.root) {
+ fun bind(itemViewModel: DiscountItemModel) {
+ binding.setVariable(BR.dataModel, itemViewModel)
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DiscountViewHolder {
+ val binding = DiscountItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return discountAdapter.DiscountViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: DiscountViewHolder, position: Int) {
+ holder.bind(DiscountItems[position])
+ }
+
+ override fun getItemCount(): Int {
+ return DiscountItems.size
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/foodCategoriesAdapter.kt b/app/src/main/java/com/example/androiduidesign/dashboard/foodCategoriesAdapter.kt
new file mode 100644
index 0000000..bd6d247
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/foodCategoriesAdapter.kt
@@ -0,0 +1,31 @@
+package com.example.androiduidesign.dashboard
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.databinding.library.baseAdapters.BR
+import androidx.recyclerview.widget.RecyclerView
+import com.example.androiduidesign.databinding.FoodCategoriesItemLayoutBinding
+
+class foodCategoriesAdapter(private val FoodCategoriesItems: ArrayList) :
+ RecyclerView.Adapter() {
+
+ class FoodCategoriesViewHolder(private val binding: FoodCategoriesItemLayoutBinding) :
+ RecyclerView.ViewHolder(binding.root) {
+ fun bind(itemViewModel: RecommendationItemModel) {
+ binding.setVariable(BR.dataModel, itemViewModel)
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodCategoriesViewHolder {
+ val binding = FoodCategoriesItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return foodCategoriesAdapter.FoodCategoriesViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: FoodCategoriesViewHolder, position: Int) {
+ holder.bind(FoodCategoriesItems[position])
+ }
+
+ override fun getItemCount(): Int {
+ return FoodCategoriesItems.size
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/dashboard/recommendationAdapter.kt b/app/src/main/java/com/example/androiduidesign/dashboard/recommendationAdapter.kt
new file mode 100644
index 0000000..8930717
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/dashboard/recommendationAdapter.kt
@@ -0,0 +1,32 @@
+package com.example.androiduidesign.dashboard
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.databinding.library.baseAdapters.BR
+import androidx.recyclerview.widget.RecyclerView
+import com.example.androiduidesign.databinding.RecommendationItemLayoutBinding
+
+class recommendationAdapter(private val RecommendationsItems: ArrayList) :
+ RecyclerView.Adapter() {
+ lateinit var binding: RecommendationItemLayoutBinding
+
+ class RecommendationViewHolder(private val binding: RecommendationItemLayoutBinding) :
+ RecyclerView.ViewHolder(binding.root) {
+ fun bind(itemViewModel: RecommendationItemModel) {
+ binding.setVariable(BR.dataModel, itemViewModel)
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecommendationViewHolder {
+ val binding = RecommendationItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return recommendationAdapter.RecommendationViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: RecommendationViewHolder, position: Int) {
+ holder.bind(RecommendationsItems[position])
+ }
+
+ override fun getItemCount(): Int {
+ return RecommendationsItems.size
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnBoardingActivity.kt b/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnBoardingActivity.kt
new file mode 100644
index 0000000..8538c71
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnBoardingActivity.kt
@@ -0,0 +1,64 @@
+package com.example.androiduidesign.onboardingscreen
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.view.WindowManager
+import androidx.databinding.DataBindingUtil
+import androidx.viewpager2.widget.ViewPager2
+import com.example.androiduidesign.R
+import com.example.androiduidesign.authentication.SignInActivity
+import com.example.androiduidesign.databinding.ActivityOnBoardingBinding
+import com.google.android.material.tabs.TabLayoutMediator
+import kotlinx.android.synthetic.main.activity_on_boarding.btn_onBoading
+import kotlinx.android.synthetic.main.activity_on_boarding.tab_layout
+import kotlinx.android.synthetic.main.activity_on_boarding.viewpager_onboarding
+
+class OnBoardingActivity : AppCompatActivity() {
+ lateinit var binding: ActivityOnBoardingBinding
+ var OnboardingItemList: ArrayList = arrayListOf()
+ var onBoardingadapter: OnboardingAdapter? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_on_boarding)
+ supportActionBar?.hide()
+ setAdapter()
+ TabLayoutMediator(tab_layout, binding.viewpagerOnboarding) { tab, position -> }.attach()
+ window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+ binding.btnOnBoading.setOnClickListener {
+ if (viewpager_onboarding.currentItem + 1 < onBoardingadapter?.itemCount ?: 0) {
+ viewpager_onboarding.setCurrentItem(viewpager_onboarding.currentItem + 1)
+ } else {
+ startActivity(Intent(this,SignInActivity::class.java))
+ finish()
+ }
+ }
+
+ binding.viewpagerOnboarding.registerOnPageChangeCallback(object :
+ ViewPager2.OnPageChangeCallback() {
+ override fun onPageSelected(position: Int) {
+ if (position + 1 < onBoardingadapter?.itemCount ?: 0) {
+ btn_onBoading.text = getString(R.string.splash_screen_btn_txt_continue)
+ } else {
+ btn_onBoading.text = getString(R.string.splash_screen_btn_txt_get_started)
+ }
+ super.onPageSelected(position)
+ }
+ })
+ }
+
+ private fun setAdapter() {
+ setData()
+ onBoardingadapter = OnboardingAdapter(OnboardingItemList)
+ binding.viewpagerOnboarding.adapter = onBoardingadapter
+ }
+
+ private fun setData() {
+ OnboardingItemList.apply {
+ add(OnBoardingItemsModel(R.drawable.splash_screen_one, getString(R.string.onboarding_title_item_one),getString(R.string.onboarding_des_item_one)))
+ add(OnBoardingItemsModel(R.drawable.splash_screen_two, getString(R.string.onboarding_title_item_two), getString(R.string.onboarding_des_item_two)))
+ add(OnBoardingItemsModel(R.drawable.splash_screen_three, getString(R.string.onboarding_title_item_three), getString(R.string.onboarding_des_item_three)))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnBoardingItemsModel.kt b/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnBoardingItemsModel.kt
new file mode 100644
index 0000000..66771fd
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnBoardingItemsModel.kt
@@ -0,0 +1,4 @@
+package com.example.androiduidesign.onboardingscreen
+
+class OnBoardingItemsModel (val image: Int, val title: String, val description: String) {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnboardingAdapter.kt b/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnboardingAdapter.kt
new file mode 100644
index 0000000..f32d2e6
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/onboardingscreen/OnboardingAdapter.kt
@@ -0,0 +1,31 @@
+package com.example.androiduidesign.onboardingscreen
+
+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.example.androiduidesign.R
+import com.example.androiduidesign.databinding.SplashScreenItemContainerLayoutBinding
+
+class OnboardingAdapter(private val onBoardingItems: ArrayList) :
+ RecyclerView.Adapter() {
+
+ lateinit var binding : SplashScreenItemContainerLayoutBinding
+ class OnboardingViewHolder(binding:SplashScreenItemContainerLayoutBinding) : RecyclerView.ViewHolder(binding.root) {
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OnboardingViewHolder {
+ binding = SplashScreenItemContainerLayoutBinding.inflate(LayoutInflater.from(parent.context),parent,false)
+ return OnboardingViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: OnboardingViewHolder, position: Int) {
+ binding.viewModel = onBoardingItems[position]
+ }
+
+ override fun getItemCount(): Int {
+ return onBoardingItems.size
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/utils/CommonFunctions.kt b/app/src/main/java/com/example/androiduidesign/utils/CommonFunctions.kt
new file mode 100644
index 0000000..3f860d2
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/utils/CommonFunctions.kt
@@ -0,0 +1,31 @@
+package com.example.androiduidesign.utils
+
+import android.content.Context
+import android.text.Spannable
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.TextPaint
+import android.text.style.ClickableSpan
+import android.view.View
+import android.widget.Toast
+
+fun getSpannable(text: String, startIndex: Int, endIndex: Int, color: Int, spanClickCallback: () -> Unit): Spannable {
+ val spannable = SpannableString(text)
+ val clickableSpan = object : ClickableSpan() {
+ override fun onClick(p0: View) {
+ spanClickCallback()
+ }
+
+ override fun updateDrawState(ds: TextPaint) {
+ super.updateDrawState(ds)
+ ds.isUnderlineText = false
+ ds.color = color
+ }
+ }
+ spannable.setSpan(clickableSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ return spannable
+}
+
+fun showMessage(context: Context, message: String) {
+ Toast.makeText(context,message, Toast.LENGTH_SHORT).show()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/androiduidesign/utils/Constants.kt b/app/src/main/java/com/example/androiduidesign/utils/Constants.kt
new file mode 100644
index 0000000..2314efa
--- /dev/null
+++ b/app/src/main/java/com/example/androiduidesign/utils/Constants.kt
@@ -0,0 +1,12 @@
+package com.example.androiduidesign.utils
+
+const val THIRTYONE = 31
+const val THIRTYEIGHT = 38
+const val TWENETYFOUR = 24
+const val ONE = 1
+const val ZERO = 0
+const val TWENTYSIX = 26
+const val NINETEEN =19
+const val TWENTY = 20
+const val THIRTYTHREE = 33
+const val TWOTHOUSAND = 2000
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/categories_item_one_image.png b/app/src/main/res/drawable-hdpi/categories_item_one_image.png
new file mode 100644
index 0000000..7716dad
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/categories_item_one_image.png differ
diff --git a/app/src/main/res/drawable-hdpi/categories_item_three_image.png b/app/src/main/res/drawable-hdpi/categories_item_three_image.png
new file mode 100644
index 0000000..cb41a08
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/categories_item_three_image.png differ
diff --git a/app/src/main/res/drawable-hdpi/categories_item_two_image.png b/app/src/main/res/drawable-hdpi/categories_item_two_image.png
new file mode 100644
index 0000000..da9cbc9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/categories_item_two_image.png differ
diff --git a/app/src/main/res/drawable-hdpi/discount_image.png b/app/src/main/res/drawable-hdpi/discount_image.png
new file mode 100644
index 0000000..57b9c2e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/discount_image.png differ
diff --git a/app/src/main/res/drawable-hdpi/discount_item_one.png b/app/src/main/res/drawable-hdpi/discount_item_one.png
new file mode 100644
index 0000000..4eace48
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/discount_item_one.png differ
diff --git a/app/src/main/res/drawable-hdpi/discount_item_two.png b/app/src/main/res/drawable-hdpi/discount_item_two.png
new file mode 100644
index 0000000..19f9b11
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/discount_item_two.png differ
diff --git a/app/src/main/res/drawable-hdpi/face_id_icone.png b/app/src/main/res/drawable-hdpi/face_id_icone.png
new file mode 100644
index 0000000..10eeadc
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/face_id_icone.png differ
diff --git a/app/src/main/res/drawable-hdpi/facebook_icone.png b/app/src/main/res/drawable-hdpi/facebook_icone.png
new file mode 100644
index 0000000..aeaf715
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/facebook_icone.png differ
diff --git a/app/src/main/res/drawable-hdpi/google_icone.png b/app/src/main/res/drawable-hdpi/google_icone.png
new file mode 100644
index 0000000..fa25651
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/google_icone.png differ
diff --git a/app/src/main/res/drawable-hdpi/phone_icon.png b/app/src/main/res/drawable-hdpi/phone_icon.png
new file mode 100644
index 0000000..88962d4
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/phone_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/recommendation_image_one.png b/app/src/main/res/drawable-hdpi/recommendation_image_one.png
new file mode 100644
index 0000000..9373072
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/recommendation_image_one.png differ
diff --git a/app/src/main/res/drawable-hdpi/recommendation_item_section_one.png b/app/src/main/res/drawable-hdpi/recommendation_item_section_one.png
new file mode 100644
index 0000000..b0ffdbe
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/recommendation_item_section_one.png differ
diff --git a/app/src/main/res/drawable-hdpi/recommendation_res_header_one.png b/app/src/main/res/drawable-hdpi/recommendation_res_header_one.png
new file mode 100644
index 0000000..d53bf00
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/recommendation_res_header_one.png differ
diff --git a/app/src/main/res/drawable-hdpi/wallet_icon.png b/app/src/main/res/drawable-hdpi/wallet_icon.png
new file mode 100644
index 0000000..847249d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/wallet_icon.png differ
diff --git a/app/src/main/res/drawable-mdpi/categories_item_one_image.png b/app/src/main/res/drawable-mdpi/categories_item_one_image.png
new file mode 100644
index 0000000..b634aef
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/categories_item_one_image.png differ
diff --git a/app/src/main/res/drawable-mdpi/categories_item_three_image.png b/app/src/main/res/drawable-mdpi/categories_item_three_image.png
new file mode 100644
index 0000000..73b1bea
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/categories_item_three_image.png differ
diff --git a/app/src/main/res/drawable-mdpi/categories_item_two_image.png b/app/src/main/res/drawable-mdpi/categories_item_two_image.png
new file mode 100644
index 0000000..ea70cbe
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/categories_item_two_image.png differ
diff --git a/app/src/main/res/drawable-mdpi/discount_image.png b/app/src/main/res/drawable-mdpi/discount_image.png
new file mode 100644
index 0000000..a98b9af
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/discount_image.png differ
diff --git a/app/src/main/res/drawable-mdpi/discount_item_one.png b/app/src/main/res/drawable-mdpi/discount_item_one.png
new file mode 100644
index 0000000..495a81c
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/discount_item_one.png differ
diff --git a/app/src/main/res/drawable-mdpi/discount_item_two.png b/app/src/main/res/drawable-mdpi/discount_item_two.png
new file mode 100644
index 0000000..f3fbb71
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/discount_item_two.png differ
diff --git a/app/src/main/res/drawable-mdpi/face_id_icone.png b/app/src/main/res/drawable-mdpi/face_id_icone.png
new file mode 100644
index 0000000..b4c1a71
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/face_id_icone.png differ
diff --git a/app/src/main/res/drawable-mdpi/facebook_icone.png b/app/src/main/res/drawable-mdpi/facebook_icone.png
new file mode 100644
index 0000000..305e0c5
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/facebook_icone.png differ
diff --git a/app/src/main/res/drawable-mdpi/google_icone.png b/app/src/main/res/drawable-mdpi/google_icone.png
new file mode 100644
index 0000000..5c1e34f
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/google_icone.png differ
diff --git a/app/src/main/res/drawable-mdpi/phone_icon.png b/app/src/main/res/drawable-mdpi/phone_icon.png
new file mode 100644
index 0000000..d6f1260
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/phone_icon.png differ
diff --git a/app/src/main/res/drawable-mdpi/recommendation_image_one.png b/app/src/main/res/drawable-mdpi/recommendation_image_one.png
new file mode 100644
index 0000000..cc86f53
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/recommendation_image_one.png differ
diff --git a/app/src/main/res/drawable-mdpi/recommendation_item_section_one.png b/app/src/main/res/drawable-mdpi/recommendation_item_section_one.png
new file mode 100644
index 0000000..8b8e3e4
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/recommendation_item_section_one.png differ
diff --git a/app/src/main/res/drawable-mdpi/recommendation_res_header_one.png b/app/src/main/res/drawable-mdpi/recommendation_res_header_one.png
new file mode 100644
index 0000000..2600a5a
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/recommendation_res_header_one.png differ
diff --git a/app/src/main/res/drawable-mdpi/wallet_icon.png b/app/src/main/res/drawable-mdpi/wallet_icon.png
new file mode 100644
index 0000000..023ae11
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/wallet_icon.png differ
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xhdpi/categories_item_one_image.png b/app/src/main/res/drawable-xhdpi/categories_item_one_image.png
new file mode 100644
index 0000000..a33a395
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/categories_item_one_image.png differ
diff --git a/app/src/main/res/drawable-xhdpi/categories_item_three_image.png b/app/src/main/res/drawable-xhdpi/categories_item_three_image.png
new file mode 100644
index 0000000..f068fc6
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/categories_item_three_image.png differ
diff --git a/app/src/main/res/drawable-xhdpi/categories_item_two_image.png b/app/src/main/res/drawable-xhdpi/categories_item_two_image.png
new file mode 100644
index 0000000..7611cc2
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/categories_item_two_image.png differ
diff --git a/app/src/main/res/drawable-xhdpi/discount_image.png b/app/src/main/res/drawable-xhdpi/discount_image.png
new file mode 100644
index 0000000..e9d8d78
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/discount_image.png differ
diff --git a/app/src/main/res/drawable-xhdpi/discount_item_one.png b/app/src/main/res/drawable-xhdpi/discount_item_one.png
new file mode 100644
index 0000000..1950a10
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/discount_item_one.png differ
diff --git a/app/src/main/res/drawable-xhdpi/discount_item_two.png b/app/src/main/res/drawable-xhdpi/discount_item_two.png
new file mode 100644
index 0000000..20fec18
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/discount_item_two.png differ
diff --git a/app/src/main/res/drawable-xhdpi/face_id_icone.png b/app/src/main/res/drawable-xhdpi/face_id_icone.png
new file mode 100644
index 0000000..905cc1d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/face_id_icone.png differ
diff --git a/app/src/main/res/drawable-xhdpi/facebook_icone.png b/app/src/main/res/drawable-xhdpi/facebook_icone.png
new file mode 100644
index 0000000..cb0f791
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/facebook_icone.png differ
diff --git a/app/src/main/res/drawable-xhdpi/google_icone.png b/app/src/main/res/drawable-xhdpi/google_icone.png
new file mode 100644
index 0000000..6854b40
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/google_icone.png differ
diff --git a/app/src/main/res/drawable-xhdpi/phone_icon.png b/app/src/main/res/drawable-xhdpi/phone_icon.png
new file mode 100644
index 0000000..585b6b3
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/phone_icon.png differ
diff --git a/app/src/main/res/drawable-xhdpi/recommendation_image_one.png b/app/src/main/res/drawable-xhdpi/recommendation_image_one.png
new file mode 100644
index 0000000..9353f6d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/recommendation_image_one.png differ
diff --git a/app/src/main/res/drawable-xhdpi/recommendation_item_section_one.png b/app/src/main/res/drawable-xhdpi/recommendation_item_section_one.png
new file mode 100644
index 0000000..08b8bd2
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/recommendation_item_section_one.png differ
diff --git a/app/src/main/res/drawable-xhdpi/recommendation_res_header_one.png b/app/src/main/res/drawable-xhdpi/recommendation_res_header_one.png
new file mode 100644
index 0000000..0ad6eac
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/recommendation_res_header_one.png differ
diff --git a/app/src/main/res/drawable-xhdpi/wallet_icon.png b/app/src/main/res/drawable-xhdpi/wallet_icon.png
new file mode 100644
index 0000000..965945e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/wallet_icon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/categories_item_one_image.png b/app/src/main/res/drawable-xxhdpi/categories_item_one_image.png
new file mode 100644
index 0000000..47f3b15
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/categories_item_one_image.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/categories_item_three_image.png b/app/src/main/res/drawable-xxhdpi/categories_item_three_image.png
new file mode 100644
index 0000000..83fd255
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/categories_item_three_image.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/categories_item_two_image.png b/app/src/main/res/drawable-xxhdpi/categories_item_two_image.png
new file mode 100644
index 0000000..e5d0685
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/categories_item_two_image.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/discount_image.png b/app/src/main/res/drawable-xxhdpi/discount_image.png
new file mode 100644
index 0000000..eb9e45c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/discount_image.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/discount_item_one.png b/app/src/main/res/drawable-xxhdpi/discount_item_one.png
new file mode 100644
index 0000000..869df27
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/discount_item_one.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/discount_item_two.png b/app/src/main/res/drawable-xxhdpi/discount_item_two.png
new file mode 100644
index 0000000..164415b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/discount_item_two.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/face_id_icone.png b/app/src/main/res/drawable-xxhdpi/face_id_icone.png
new file mode 100644
index 0000000..2c38cab
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/face_id_icone.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/facebook_icone.png b/app/src/main/res/drawable-xxhdpi/facebook_icone.png
new file mode 100644
index 0000000..cf40661
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/facebook_icone.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/google_icone.png b/app/src/main/res/drawable-xxhdpi/google_icone.png
new file mode 100644
index 0000000..697b3ea
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/google_icone.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/phone_icon.png b/app/src/main/res/drawable-xxhdpi/phone_icon.png
new file mode 100644
index 0000000..89e3536
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/phone_icon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/recommendation_image_one.png b/app/src/main/res/drawable-xxhdpi/recommendation_image_one.png
new file mode 100644
index 0000000..fd5e07d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/recommendation_image_one.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/recommendation_item_section_one.png b/app/src/main/res/drawable-xxhdpi/recommendation_item_section_one.png
new file mode 100644
index 0000000..af22f04
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/recommendation_item_section_one.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/recommendation_res_header_one.png b/app/src/main/res/drawable-xxhdpi/recommendation_res_header_one.png
new file mode 100644
index 0000000..e7f085f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/recommendation_res_header_one.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/wallet_icon.png b/app/src/main/res/drawable-xxhdpi/wallet_icon.png
new file mode 100644
index 0000000..a922bc8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/wallet_icon.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/categories_item_one_image.png b/app/src/main/res/drawable-xxxhdpi/categories_item_one_image.png
new file mode 100644
index 0000000..899e805
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/categories_item_one_image.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/categories_item_three_image.png b/app/src/main/res/drawable-xxxhdpi/categories_item_three_image.png
new file mode 100644
index 0000000..846f509
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/categories_item_three_image.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/categories_item_two_image.png b/app/src/main/res/drawable-xxxhdpi/categories_item_two_image.png
new file mode 100644
index 0000000..fbe482e
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/categories_item_two_image.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/discount_image.png b/app/src/main/res/drawable-xxxhdpi/discount_image.png
new file mode 100644
index 0000000..184d1d6
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/discount_image.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/discount_item_one.png b/app/src/main/res/drawable-xxxhdpi/discount_item_one.png
new file mode 100644
index 0000000..6135a5f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/discount_item_one.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/discount_item_two.png b/app/src/main/res/drawable-xxxhdpi/discount_item_two.png
new file mode 100644
index 0000000..469f02c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/discount_item_two.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/face_id_icone.png b/app/src/main/res/drawable-xxxhdpi/face_id_icone.png
new file mode 100644
index 0000000..415f16f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/face_id_icone.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/facebook_icone.png b/app/src/main/res/drawable-xxxhdpi/facebook_icone.png
new file mode 100644
index 0000000..8d1d3bc
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/facebook_icone.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/google_icone.png b/app/src/main/res/drawable-xxxhdpi/google_icone.png
new file mode 100644
index 0000000..090fe7b
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/google_icone.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/phone_icon.png b/app/src/main/res/drawable-xxxhdpi/phone_icon.png
new file mode 100644
index 0000000..308e610
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/phone_icon.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/recommendation_image_one.png b/app/src/main/res/drawable-xxxhdpi/recommendation_image_one.png
new file mode 100644
index 0000000..0a3967f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/recommendation_image_one.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/recommendation_item_section_one.png b/app/src/main/res/drawable-xxxhdpi/recommendation_item_section_one.png
new file mode 100644
index 0000000..e18ab94
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/recommendation_item_section_one.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/recommendation_res_header_one.png b/app/src/main/res/drawable-xxxhdpi/recommendation_res_header_one.png
new file mode 100644
index 0000000..dc64a86
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/recommendation_res_header_one.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/wallet_icon.png b/app/src/main/res/drawable-xxxhdpi/wallet_icon.png
new file mode 100644
index 0000000..b08eb7f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/wallet_icon.png differ
diff --git a/app/src/main/res/drawable/arrow_right.xml b/app/src/main/res/drawable/arrow_right.xml
new file mode 100644
index 0000000..35f9955
--- /dev/null
+++ b/app/src/main/res/drawable/arrow_right.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/back_arrow.xml b/app/src/main/res/drawable/back_arrow.xml
new file mode 100644
index 0000000..a6402e8
--- /dev/null
+++ b/app/src/main/res/drawable/back_arrow.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/back_nut_pay_image.xml b/app/src/main/res/drawable/back_nut_pay_image.xml
new file mode 100644
index 0000000..1031dc9
--- /dev/null
+++ b/app/src/main/res/drawable/back_nut_pay_image.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/best_seller_icon.xml b/app/src/main/res/drawable/best_seller_icon.xml
new file mode 100644
index 0000000..cb15110
--- /dev/null
+++ b/app/src/main/res/drawable/best_seller_icon.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/button_background.xml b/app/src/main/res/drawable/button_background.xml
new file mode 100644
index 0000000..f24eacb
--- /dev/null
+++ b/app/src/main/res/drawable/button_background.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/cursor_style.xml b/app/src/main/res/drawable/cursor_style.xml
new file mode 100644
index 0000000..4c3915a
--- /dev/null
+++ b/app/src/main/res/drawable/cursor_style.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/default_dot.xml b/app/src/main/res/drawable/default_dot.xml
new file mode 100644
index 0000000..3380dca
--- /dev/null
+++ b/app/src/main/res/drawable/default_dot.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/discount_tag_back.xml b/app/src/main/res/drawable/discount_tag_back.xml
new file mode 100644
index 0000000..584191f
--- /dev/null
+++ b/app/src/main/res/drawable/discount_tag_back.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/dot_seprator.xml b/app/src/main/res/drawable/dot_seprator.xml
new file mode 100644
index 0000000..1646239
--- /dev/null
+++ b/app/src/main/res/drawable/dot_seprator.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/drop_down_arrow.xml b/app/src/main/res/drawable/drop_down_arrow.xml
new file mode 100644
index 0000000..f41dd49
--- /dev/null
+++ b/app/src/main/res/drawable/drop_down_arrow.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/app/src/main/res/drawable/edit_text_border.xml b/app/src/main/res/drawable/edit_text_border.xml
new file mode 100644
index 0000000..59b0b20
--- /dev/null
+++ b/app/src/main/res/drawable/edit_text_border.xml
@@ -0,0 +1,18 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/email_icon.xml b/app/src/main/res/drawable/email_icon.xml
new file mode 100644
index 0000000..44abd34
--- /dev/null
+++ b/app/src/main/res/drawable/email_icon.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/healthy_icon.xml b/app/src/main/res/drawable/healthy_icon.xml
new file mode 100644
index 0000000..e2775f1
--- /dev/null
+++ b/app/src/main/res/drawable/healthy_icon.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_backspace_24.xml b/app/src/main/res/drawable/ic_baseline_keyboard_backspace_24.xml
new file mode 100644
index 0000000..8d31b11
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_keyboard_backspace_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_splash_screen_top.xml b/app/src/main/res/drawable/ic_splash_screen_top.xml
new file mode 100644
index 0000000..29741ea
--- /dev/null
+++ b/app/src/main/res/drawable/ic_splash_screen_top.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/menu_dots.xml b/app/src/main/res/drawable/menu_dots.xml
new file mode 100644
index 0000000..9af72cd
--- /dev/null
+++ b/app/src/main/res/drawable/menu_dots.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/minus_button_background.xml b/app/src/main/res/drawable/minus_button_background.xml
new file mode 100644
index 0000000..eeee6d9
--- /dev/null
+++ b/app/src/main/res/drawable/minus_button_background.xml
@@ -0,0 +1,16 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/nearest_icon.xml b/app/src/main/res/drawable/nearest_icon.xml
new file mode 100644
index 0000000..67c6819
--- /dev/null
+++ b/app/src/main/res/drawable/nearest_icon.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/new_food_icon.xml b/app/src/main/res/drawable/new_food_icon.xml
new file mode 100644
index 0000000..4a3079f
--- /dev/null
+++ b/app/src/main/res/drawable/new_food_icon.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/notification_icon.xml b/app/src/main/res/drawable/notification_icon.xml
new file mode 100644
index 0000000..378a767
--- /dev/null
+++ b/app/src/main/res/drawable/notification_icon.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/pay_icon.xml b/app/src/main/res/drawable/pay_icon.xml
new file mode 100644
index 0000000..09b3a1f
--- /dev/null
+++ b/app/src/main/res/drawable/pay_icon.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/plus_button_background.xml b/app/src/main/res/drawable/plus_button_background.xml
new file mode 100644
index 0000000..8a0aec4
--- /dev/null
+++ b/app/src/main/res/drawable/plus_button_background.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/plus_icon.xml b/app/src/main/res/drawable/plus_icon.xml
new file mode 100644
index 0000000..48e9e50
--- /dev/null
+++ b/app/src/main/res/drawable/plus_icon.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/profile_icon.xml b/app/src/main/res/drawable/profile_icon.xml
new file mode 100644
index 0000000..fc536ed
--- /dev/null
+++ b/app/src/main/res/drawable/profile_icon.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/search_icon.xml b/app/src/main/res/drawable/search_icon.xml
new file mode 100644
index 0000000..618234e
--- /dev/null
+++ b/app/src/main/res/drawable/search_icon.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/selected_dot.xml b/app/src/main/res/drawable/selected_dot.xml
new file mode 100644
index 0000000..2e007e6
--- /dev/null
+++ b/app/src/main/res/drawable/selected_dot.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/splash_screen_bottom.png b/app/src/main/res/drawable/splash_screen_bottom.png
new file mode 100644
index 0000000..e7de335
Binary files /dev/null and b/app/src/main/res/drawable/splash_screen_bottom.png differ
diff --git a/app/src/main/res/drawable/splash_screen_one.png b/app/src/main/res/drawable/splash_screen_one.png
new file mode 100644
index 0000000..f9a8677
Binary files /dev/null and b/app/src/main/res/drawable/splash_screen_one.png differ
diff --git a/app/src/main/res/drawable/splash_screen_three.png b/app/src/main/res/drawable/splash_screen_three.png
new file mode 100644
index 0000000..2eb1f13
Binary files /dev/null and b/app/src/main/res/drawable/splash_screen_three.png differ
diff --git a/app/src/main/res/drawable/splash_screen_top.png b/app/src/main/res/drawable/splash_screen_top.png
new file mode 100644
index 0000000..16218f9
Binary files /dev/null and b/app/src/main/res/drawable/splash_screen_top.png differ
diff --git a/app/src/main/res/drawable/splash_screen_two.png b/app/src/main/res/drawable/splash_screen_two.png
new file mode 100644
index 0000000..7c30b27
Binary files /dev/null and b/app/src/main/res/drawable/splash_screen_two.png differ
diff --git a/app/src/main/res/drawable/star_icon.xml b/app/src/main/res/drawable/star_icon.xml
new file mode 100644
index 0000000..36f41d8
--- /dev/null
+++ b/app/src/main/res/drawable/star_icon.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/tab_selector.xml b/app/src/main/res/drawable/tab_selector.xml
new file mode 100644
index 0000000..5e758f6
--- /dev/null
+++ b/app/src/main/res/drawable/tab_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/font.xml b/app/src/main/res/font/font.xml
new file mode 100644
index 0000000..8f51456
--- /dev/null
+++ b/app/src/main/res/font/font.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/manropebold.ttf b/app/src/main/res/font/manropebold.ttf
new file mode 100644
index 0000000..db03274
Binary files /dev/null and b/app/src/main/res/font/manropebold.ttf differ
diff --git a/app/src/main/res/font/manropemedium.ttf b/app/src/main/res/font/manropemedium.ttf
new file mode 100644
index 0000000..22badeb
Binary files /dev/null and b/app/src/main/res/font/manropemedium.ttf differ
diff --git a/app/src/main/res/font/manroperegular.ttf b/app/src/main/res/font/manroperegular.ttf
new file mode 100644
index 0000000..7cf09bf
Binary files /dev/null and b/app/src/main/res/font/manroperegular.ttf differ
diff --git a/app/src/main/res/font/manropesemibold.ttf b/app/src/main/res/font/manropesemibold.ttf
new file mode 100644
index 0000000..c3a6768
Binary files /dev/null and b/app/src/main/res/font/manropesemibold.ttf differ
diff --git a/app/src/main/res/layout/activity_detaile_recommendation.xml b/app/src/main/res/layout/activity_detaile_recommendation.xml
new file mode 100644
index 0000000..0335722
--- /dev/null
+++ b/app/src/main/res/layout/activity_detaile_recommendation.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_forget_password.xml b/app/src/main/res/layout/activity_forget_password.xml
new file mode 100644
index 0000000..5c5a9eb
--- /dev/null
+++ b/app/src/main/res/layout/activity_forget_password.xml
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home_screen.xml b/app/src/main/res/layout/activity_home_screen.xml
new file mode 100644
index 0000000..3e7fabf
--- /dev/null
+++ b/app/src/main/res/layout/activity_home_screen.xml
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..64edfec
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_on_boarding.xml b/app/src/main/res/layout/activity_on_boarding.xml
new file mode 100644
index 0000000..f88c58d
--- /dev/null
+++ b/app/src/main/res/layout/activity_on_boarding.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_sign_in.xml b/app/src/main/res/layout/activity_sign_in.xml
new file mode 100644
index 0000000..1931b10
--- /dev/null
+++ b/app/src/main/res/layout/activity_sign_in.xml
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml
new file mode 100644
index 0000000..b80bb30
--- /dev/null
+++ b/app/src/main/res/layout/activity_signup.xml
@@ -0,0 +1,302 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_splash_screen.xml b/app/src/main/res/layout/activity_splash_screen.xml
new file mode 100644
index 0000000..8f81cec
--- /dev/null
+++ b/app/src/main/res/layout/activity_splash_screen.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_verfication_screen.xml b/app/src/main/res/layout/activity_verfication_screen.xml
new file mode 100644
index 0000000..fc3f765
--- /dev/null
+++ b/app/src/main/res/layout/activity_verfication_screen.xml
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/categories_item_layout.xml b/app/src/main/res/layout/categories_item_layout.xml
new file mode 100644
index 0000000..452b047
--- /dev/null
+++ b/app/src/main/res/layout/categories_item_layout.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/discount_item_layout.xml b/app/src/main/res/layout/discount_item_layout.xml
new file mode 100644
index 0000000..1f6f970
--- /dev/null
+++ b/app/src/main/res/layout/discount_item_layout.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/food_categories_item_layout.xml b/app/src/main/res/layout/food_categories_item_layout.xml
new file mode 100644
index 0000000..798e1d1
--- /dev/null
+++ b/app/src/main/res/layout/food_categories_item_layout.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recommendation_item_layout.xml b/app/src/main/res/layout/recommendation_item_layout.xml
new file mode 100644
index 0000000..28bd07e
--- /dev/null
+++ b/app/src/main/res/layout/recommendation_item_layout.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recommendation_restaurants_header_item_layout.xml b/app/src/main/res/layout/recommendation_restaurants_header_item_layout.xml
new file mode 100644
index 0000000..cbdbadd
--- /dev/null
+++ b/app/src/main/res/layout/recommendation_restaurants_header_item_layout.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recommendation_restaurants_section_item_layout.xml b/app/src/main/res/layout/recommendation_restaurants_section_item_layout.xml
new file mode 100644
index 0000000..d10977e
--- /dev/null
+++ b/app/src/main/res/layout/recommendation_restaurants_section_item_layout.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/splash_screen_item_container_layout.xml b/app/src/main/res/layout/splash_screen_item_container_layout.xml
new file mode 100644
index 0000000..420c6dd
--- /dev/null
+++ b/app/src/main/res/layout/splash_screen_item_container_layout.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..7551d5f
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..c1f6366
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFBB86FC
+ #13B156
+ #42C178
+ #FFAA2C
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #787B82
+ #FF0000
+ #FFFF00
+ #FFA500
+ #00000000
+ #FFAA2C
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..f9272a5
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,312 @@
+
+ Android UI Design
+ Nutrice.
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Tincidunt et, volutpat duis amet, risus.
+ Continue
+ Completed Categories and Easy to Find Delicious Food
+ You can find a full range of categories and delicious and easy-to-find foods around you.
+ Many Coupons You Can Use with Big Discounts
+ There are many discount coupons that you can use with big discount.
+ Face Id Feature for Easy Access and Secure Transactions
+ There is a face ID feature that can be used with easy access and safe transactions.
+ Get Started
+ Sign in
+ Please sign in first to enjoy the service.
+ Email
+ Password
+ Remember me?
+ Forgot password?
+ Sign In
+ Continue with Face Id
+ Continue with Google
+ Continue with Facebook
+ Sign in
+ Sign up
+ I don’t have a account? Sign up
+ I have an account? Sign in
+ Please sign up first to enjoy the service.
+ Full Name
+ Strong
+ Confirm Password
+ Phone Number
+
+ Weak
+ Medium
+ ""
+ [0-9]
+ [a-z]
+ [A-Z]
+ User Created Successfully
+ Name Empty
+ Email Empty
+ password Empty
+ Confirm Password Empty
+ Enter Phone Number
+ Enter Valid Phone number
+ or
+ Sign In Button Clicked
+ Face Id Clicked
+ FaceBook Button Clicked
+ Google Button Clicked
+ Forgot password
+ Please choose one way to find your password again.
+ ********@mail.com
+ Phone Number
+ **** **** **** 2345
+ Do you remember your password? Sign in
+ Send Code Button Clicked
+ Verification code
+ Please check your phone. We have to sent the code verification to your mobile number.
+ Resend code in 00:56
+ Verify
+ Wrong phone number? Update number
+ Enter OTP
+ Verfication Button Taped
+ Resend Code in %s
+ Your Location
+ Jl. Mahakarya No.21
+ Nutpay
+ $156,340.80
+ Top up
+ Pay
+ Categories
+ Recommendations near you
+ We choose delicious and close to you.
+ See all
+ There is 1 idle discount
+ Takasimuraaa
+ We choose cheap food for you
+ Lalapan Akang Slamet
+ 1.02 km
+ 8 min
+ 4.9
+ 6rb+ ratings
+ 15%
+ Nasi Goreng Dower, Rumbai
+ 14 mins
+ Rocket Chicken Kayu Manis
+ See All Recommendation Clicked
+ see All Categoried Clicked
+ Pay Button tapped
+ Plus Button Tapped
+ Email is Not Valid
+ Bamboo Restaurant
+
+ 4.5
+ 0.1 km
+ 13 min
+ Super Family Package
+ 0
+ 2 Chicken Wings, 2 Rice, ...
+ Password should be Strong
+ Times Up Again Request For OTP
+ %02d:%02d
+
+ - +93
+ - +355
+ - +213
+ - +376
+ - +244
+ - +672
+ - +54
+ - +374
+ - +297
+ - +61
+ - +43
+ - +994
+ - +973
+ - +880
+ - +375
+ - +32
+ - +501
+ - +229
+ - +975
+ - +591
+ - +387
+ - +267
+ - +55
+ - +673
+ - +359
+ - +226
+ - +95
+ - +257
+ - +855
+ - +237
+ - +1
+ - +238
+ - +236
+ - +235
+ - +56
+ - +86
+ - +61
+ - +61
+ - +57
+ - +269
+ - +242
+ - +243
+ - +682
+ - +506
+ - +385
+ - +53
+ - +357
+ - +420
+ - +45
+ - +253
+ - +670
+ - +593
+ - +20
+ - +503
+ - +240
+ - +291
+ - +372
+ - +251
+ - +500
+ - +298
+ - +679
+ - +358
+ - +33
+ - +689
+ - +241
+ - +220
+ - +995
+ - +49
+ - +233
+ - +350
+ - +30
+ - +299
+ - +502
+ - +224
+ - +245
+ - +592
+ - +509
+ - +504
+ - +852
+ - +36
+ - +91
+ - +62
+ - +98
+ - +964
+ - +353
+ - +44
+ - +972
+ - +39
+ - +225
+ - +81
+ - +962
+ - +7
+ - +254
+ - +686
+ - +965
+ - +996
+ - +856
+ - +371
+ - +961
+ - +266
+ - +231
+ - +218
+ - +423
+ - +370
+ - +352
+ - +853
+ - +389
+ - +261
+ - +265
+ - +60
+ - +960
+ - +223
+ - +356
+ - +692
+ - +222
+ - +230
+ - +262
+ - +52
+ - +691
+ - +373
+ - +377
+ - +976
+ - +382
+ - +212
+ - +258
+ - +264
+ - +674
+ - +977
+ - +31
+ - +599
+ - +687
+ - +64
+ - +505
+ - +227
+ - +234
+ - +683
+ - +850
+ - +47
+ - +968
+ - +92
+ - +680
+ - +507
+ - +675
+ - +595
+ - +51
+ - +63
+ - +870
+ - +48
+ - +351
+ - +1
+ - +974
+ - +40
+ - +7
+ - +250
+ - +590
+ - +685
+ - +378
+ - +239
+ - +966
+ - +221
+ - +381
+ - +248
+ - +232
+ - +65
+ - +421
+ - +386
+ - +677
+ - +252
+ - +27
+ - +82
+ - +34
+ - +94
+ - +290
+ - +508
+ - +249
+ - +597
+ - +268
+ - +46
+ - +41
+ - +963
+ - +886
+ - +992
+ - +255
+ - +66
+ - +228
+ - +690
+ - +676
+ - +216
+ - +90
+ - +993
+ - +688
+ - +971
+ - +25
+ - +44
+ - +380
+ - +598
+ - +1
+ - +998
+ - +678
+ - +39
+ - +58
+ - +84
+ - +681
+ - +967
+ - +260
+ - +263
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml
new file mode 100644
index 0000000..5cd8ac6
--- /dev/null
+++ b/app/src/main/res/values/style.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/style_filled_button.xml b/app/src/main/res/values/style_filled_button.xml
new file mode 100644
index 0000000..f662e88
--- /dev/null
+++ b/app/src/main/res/values/style_filled_button.xml
@@ -0,0 +1,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..9bdd6ec
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,17 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/example/androiduidesign/ExampleUnitTest.kt b/app/src/test/java/com/example/androiduidesign/ExampleUnitTest.kt
new file mode 100644
index 0000000..1b1495b
--- /dev/null
+++ b/app/src/test/java/com/example/androiduidesign/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.example.androiduidesign
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..0ccd671
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,10 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '7.1.2' apply false
+ id 'com.android.library' version '7.1.2' apply false
+ id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..cd0519b
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,23 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e708b1c
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..b0bb731
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon May 09 17:41:40 IST 2022
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..4f906e0
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..3003dbc
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = "Android UI Design"
+include ':app'