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'