diff --git a/Bank/.gitignore b/Bank/.gitignore
new file mode 100644
index 000000000..aa724b770
--- /dev/null
+++ b/Bank/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/Bank/.idea/.gitignore b/Bank/.idea/.gitignore
new file mode 100644
index 000000000..26d33521a
--- /dev/null
+++ b/Bank/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Bank/.idea/compiler.xml b/Bank/.idea/compiler.xml
new file mode 100644
index 000000000..b589d56e9
--- /dev/null
+++ b/Bank/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/.idea/deploymentTargetDropDown.xml b/Bank/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 000000000..3c051256c
--- /dev/null
+++ b/Bank/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/.idea/gradle.xml b/Bank/.idea/gradle.xml
new file mode 100644
index 000000000..ae388c2a5
--- /dev/null
+++ b/Bank/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/.idea/kotlinc.xml b/Bank/.idea/kotlinc.xml
new file mode 100644
index 000000000..2b8a50fc2
--- /dev/null
+++ b/Bank/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/.idea/misc.xml b/Bank/.idea/misc.xml
new file mode 100644
index 000000000..8978d23db
--- /dev/null
+++ b/Bank/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/.idea/vcs.xml b/Bank/.idea/vcs.xml
new file mode 100644
index 000000000..6c0b86358
--- /dev/null
+++ b/Bank/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/app/.gitignore b/Bank/app/.gitignore
new file mode 100644
index 000000000..42afabfd2
--- /dev/null
+++ b/Bank/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/Bank/app/build.gradle.kts b/Bank/app/build.gradle.kts
new file mode 100644
index 000000000..80e6a96a1
--- /dev/null
+++ b/Bank/app/build.gradle.kts
@@ -0,0 +1,64 @@
+import org.jetbrains.kotlin.storage.CacheResetOnProcessCanceled.enabled
+
+plugins {
+ id("com.android.application")
+ id("org.jetbrains.kotlin.android")
+}
+
+android {
+ namespace = "com.jisellemartins.bank"
+ compileSdk = 33
+
+ defaultConfig {
+ applicationId = "com.jisellemartins.bank"
+ minSdk = 21
+ targetSdk = 33
+ versionCode = 1
+ versionName = "1.0"
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+
+ buildTypes {
+ release {
+ isMinifyEnabled = 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"
+ }
+ buildFeatures {
+ //noinspection DataBindingWithoutKapt
+ dataBinding = true
+ }
+
+}
+
+dependencies {
+
+ implementation("androidx.core:core-ktx:1.9.0")
+ implementation("androidx.appcompat:appcompat:1.6.1")
+ implementation("com.google.android.material:material:1.9.0")
+ implementation("androidx.constraintlayout:constraintlayout:2.1.4")
+ testImplementation("junit:junit:4.13.2")
+ testImplementation ("androidx.test:core:1.0.0")
+ testImplementation ("org.mockito:mockito-core:1.10.19")
+ androidTestImplementation("androidx.test.ext:junit:1.1.5")
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
+ implementation ("io.insert-koin:koin-android:3.4.3")
+ implementation ("com.squareup.retrofit2:retrofit:2.9.0")
+ implementation ("com.google.code.gson:gson:2.10.1")
+ implementation("com.squareup.retrofit2:converter-gson:2.2.0")
+ implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1")
+}
\ No newline at end of file
diff --git a/Bank/app/proguard-rules.pro b/Bank/app/proguard-rules.pro
new file mode 100644
index 000000000..481bb4348
--- /dev/null
+++ b/Bank/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/Bank/app/release/app-release.apk b/Bank/app/release/app-release.apk
new file mode 100644
index 000000000..065e71745
Binary files /dev/null and b/Bank/app/release/app-release.apk differ
diff --git a/Bank/app/release/output-metadata.json b/Bank/app/release/output-metadata.json
new file mode 100644
index 000000000..97cd867ff
--- /dev/null
+++ b/Bank/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.jisellemartins.bank",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/Bank/app/src/androidTest/java/com/jisellemartins/bank/ExampleInstrumentedTest.kt b/Bank/app/src/androidTest/java/com/jisellemartins/bank/ExampleInstrumentedTest.kt
new file mode 100644
index 000000000..a05685b49
--- /dev/null
+++ b/Bank/app/src/androidTest/java/com/jisellemartins/bank/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.jisellemartins.bank
+
+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.jisellemartins.bank", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/AndroidManifest.xml b/Bank/app/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..85a28201c
--- /dev/null
+++ b/Bank/app/src/main/AndroidManifest.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/BankAplication.kt b/Bank/app/src/main/java/com/jisellemartins/bank/BankAplication.kt
new file mode 100644
index 000000000..486863564
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/BankAplication.kt
@@ -0,0 +1,18 @@
+package com.jisellemartins.bank
+
+import android.app.Application
+import com.jisellemartins.bank.di.moduleGlobal
+import org.koin.android.ext.koin.androidContext
+import org.koin.android.ext.koin.androidLogger
+import org.koin.core.context.GlobalContext
+
+class BankAplication:Application() {
+ override fun onCreate() {
+ super.onCreate()
+ GlobalContext.startKoin {
+ androidLogger()
+ androidContext(this@BankAplication)
+ modules(moduleGlobal)
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/di/ModuleGlobal.kt b/Bank/app/src/main/java/com/jisellemartins/bank/di/ModuleGlobal.kt
new file mode 100644
index 000000000..a1f1018b1
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/di/ModuleGlobal.kt
@@ -0,0 +1,18 @@
+package com.jisellemartins.bank.di
+
+import com.jisellemartins.bank.repositories.BankRepository
+import com.jisellemartins.bank.service.BankService
+import com.jisellemartins.bank.service.service
+import com.jisellemartins.bank.viewmodel.LoginViewModel
+import com.jisellemartins.bank.viewmodel.StatementsViewModel
+import org.koin.androidx.viewmodel.dsl.viewModel
+import org.koin.dsl.module
+import retrofit2.Retrofit
+
+val moduleGlobal = module {
+ single { service.api }
+ single { get().create(BankService::class.java)}
+ single { BankRepository(get()) }
+ viewModel{ LoginViewModel(get())}
+ viewModel{ StatementsViewModel(get()) }
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/extensions/LiveDataExtension.kt b/Bank/app/src/main/java/com/jisellemartins/bank/extensions/LiveDataExtension.kt
new file mode 100644
index 000000000..f4fdb8cce
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/extensions/LiveDataExtension.kt
@@ -0,0 +1,6 @@
+package com.jisellemartins.bank.extensions
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+
+fun MutableLiveData.toLiveData() = this as LiveData
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/model/Credencials.kt b/Bank/app/src/main/java/com/jisellemartins/bank/model/Credencials.kt
new file mode 100644
index 000000000..dba268dba
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/model/Credencials.kt
@@ -0,0 +1,6 @@
+package com.jisellemartins.bank.model
+
+ data class Credencials(
+ val user: String = "",
+ val password: String = ""
+ )
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/model/DetailsUser.kt b/Bank/app/src/main/java/com/jisellemartins/bank/model/DetailsUser.kt
new file mode 100644
index 000000000..3b90ec574
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/model/DetailsUser.kt
@@ -0,0 +1,10 @@
+package com.jisellemartins.bank.model
+
+class DetailsUser(
+ var id: String,
+ var loginId: String,
+ var account: String,
+ var balance: Int,
+ var user: User,
+ var statementsList: List
+)
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/model/Login.kt b/Bank/app/src/main/java/com/jisellemartins/bank/model/Login.kt
new file mode 100644
index 000000000..afa0b5bc0
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/model/Login.kt
@@ -0,0 +1,9 @@
+package com.jisellemartins.bank.model
+
+class Login (
+ var user:String = "",
+ var password:String = ""
+)
+
+
+
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/model/Statements.kt b/Bank/app/src/main/java/com/jisellemartins/bank/model/Statements.kt
new file mode 100644
index 000000000..71a2335b7
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/model/Statements.kt
@@ -0,0 +1,8 @@
+package com.jisellemartins.bank.model
+
+class Statements (
+ var type:String,
+ var title:String,
+ var value: Double,
+ var date: String
+)
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/model/User.kt b/Bank/app/src/main/java/com/jisellemartins/bank/model/User.kt
new file mode 100644
index 000000000..c4b648184
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/model/User.kt
@@ -0,0 +1,7 @@
+package com.jisellemartins.bank.model
+
+class User (
+ var id:String,
+ var user: String,
+ var message: String
+)
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/network/Output.kt b/Bank/app/src/main/java/com/jisellemartins/bank/network/Output.kt
new file mode 100644
index 000000000..058ba71df
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/network/Output.kt
@@ -0,0 +1,9 @@
+package com.jisellemartins.bank.network
+
+sealed class Output {
+ data class Success(val data: T?) : Output()
+ data class Loading(val data: T? = null) : Output()
+ data class Error(val data: T? = null) : Output()
+ data class ErrorT(val error: Throwable) : Output()
+ object NetworkError : Output()
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/repositories/BankRepository.kt b/Bank/app/src/main/java/com/jisellemartins/bank/repositories/BankRepository.kt
new file mode 100644
index 000000000..8b72f1917
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/repositories/BankRepository.kt
@@ -0,0 +1,62 @@
+package com.jisellemartins.bank.repositories
+
+import com.jisellemartins.bank.model.DetailsUser
+import com.jisellemartins.bank.model.Login
+import com.jisellemartins.bank.model.User
+import com.jisellemartins.bank.network.Output
+import com.jisellemartins.bank.service.BankService
+import kotlinx.coroutines.flow.flow
+import retrofit2.Response
+import java.util.Objects
+
+class BankRepository constructor(
+ private val service: BankService
+) {
+
+
+ /* suspend fun postLogin(login: Login): Output {
+ val response = service.postLogin(login)
+
+ if (response.isSuccessful) {
+ return Output.Success(response.body())
+ }
+ return Output.NetworkError
+ }*/
+
+ suspend fun postLogin(login: Login) = flow {
+ emit(Output.Loading())
+ val response = service.postLogin(login)
+
+ if (response.isSuccessful) {
+ emit(Output.Success(response.body()))
+ } else {
+ emit(Output.NetworkError)
+ }
+
+ }
+
+ suspend fun getDetailsUser(idUser: String) = flow {
+ emit(Output.Loading())
+ // utilizando o idUser mockado pq o dados sao fakes
+ val response = service.getDetailsUser("2")
+
+ if (response.isSuccessful) {
+ emit(Output.Success(response.body()?.get(0)))
+
+ } else {
+ emit(Output.NetworkError)
+ }
+
+ }
+
+ /*suspend fun getDetailsUser(idUser:String): DetailsUser? {
+ val response = service.getDetailsUser(idUser)
+
+ if (response.isSuccessful) {
+ return response.body()?.get(0)
+ }
+ return null
+ }*/
+
+
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/service/BankService.kt b/Bank/app/src/main/java/com/jisellemartins/bank/service/BankService.kt
new file mode 100644
index 000000000..d11338b31
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/service/BankService.kt
@@ -0,0 +1,18 @@
+package com.jisellemartins.bank.service
+
+import com.jisellemartins.bank.model.DetailsUser
+import com.jisellemartins.bank.model.Login
+import com.jisellemartins.bank.model.User
+import retrofit2.Response
+import retrofit2.http.Body
+import retrofit2.http.GET
+import retrofit2.http.POST
+import retrofit2.http.Path
+
+interface BankService {
+ @POST("api/bank/login")
+ suspend fun postLogin(@Body login: Login): Response
+
+ @GET("api/bank/login/{idUser}/statements")
+ suspend fun getDetailsUser(@Path("idUser")idUser:String): Response>
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/service/RetrofitService.kt b/Bank/app/src/main/java/com/jisellemartins/bank/service/RetrofitService.kt
new file mode 100644
index 000000000..9f77e6f3e
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/service/RetrofitService.kt
@@ -0,0 +1,13 @@
+package com.jisellemartins.bank.service
+
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+object service {
+ val api
+ get() = Retrofit.Builder()
+ .baseUrl("https://651f39d044a3a8aa476987bb.mockapi.io/")
+ .addConverterFactory(GsonConverterFactory.create()).build()
+
+ val bankService = api.create(BankService::class.java)
+}
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/ui/adapter/ListStatementsAdapter.kt b/Bank/app/src/main/java/com/jisellemartins/bank/ui/adapter/ListStatementsAdapter.kt
new file mode 100644
index 000000000..7d931bb12
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/ui/adapter/ListStatementsAdapter.kt
@@ -0,0 +1,37 @@
+package com.jisellemartins.bank.ui.adapter
+
+import android.annotation.SuppressLint
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.jisellemartins.bank.databinding.ItemListBinding
+import com.jisellemartins.bank.model.Statements
+
+class ListStatementsAdapter(private val statements: List) :
+ RecyclerView.Adapter() {
+
+ class ViewHolder(binding: ItemListBinding) : RecyclerView.ViewHolder(binding.root) {
+ val textType = binding.textType
+ val textTitle = binding.textTitle
+ val textValue = binding.textValue
+ val textDate = binding.textDate
+ }
+
+
+ override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
+ val binding =
+ ItemListBinding.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false)
+
+ return ViewHolder(binding)
+ }
+
+
+ @SuppressLint("SetTextI18n")
+ override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
+ viewHolder.textType.text = statements[position].type
+ viewHolder.textTitle.text = statements[position].title
+ viewHolder.textValue.text = "R$ " + statements[position].value.toString()
+ viewHolder.textDate.text = statements[position].date
+ }
+ override fun getItemCount() = statements.size
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/ui/screens/LoginActivity.kt b/Bank/app/src/main/java/com/jisellemartins/bank/ui/screens/LoginActivity.kt
new file mode 100644
index 000000000..ef1733aaa
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/ui/screens/LoginActivity.kt
@@ -0,0 +1,72 @@
+package com.jisellemartins.bank.ui.screens
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import com.jisellemartins.bank.R
+import com.jisellemartins.bank.databinding.ActivityLoginBinding
+import com.jisellemartins.bank.model.Credencials
+import com.jisellemartins.bank.model.Login
+import com.jisellemartins.bank.network.Output
+import com.jisellemartins.bank.viewmodel.LoginViewModel
+import org.koin.androidx.viewmodel.ext.android.viewModel
+
+class LoginActivity : AppCompatActivity() {
+ val loginViewModel: LoginViewModel by viewModel()
+ private lateinit var binding: ActivityLoginBinding
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityLoginBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ binding.credencials = Credencials()
+
+
+ loginViewModel.loginLiveData.observe(this) {
+ binding.isloading = false
+ when (it) {
+ is Output.Success -> {
+ if (!it.data?.id.equals("0")) {
+ createPersistence(it.data?.id.toString())
+ val intent = Intent(this, StatementsActivity::class.java)
+
+ startActivity(intent)
+ } else {
+ it.data?.message?.let { message -> showToast(message, this) }
+ }
+ }
+ is Output.Error ->{
+ it.data?.message?.let { message -> showToast(message, this) }
+ }
+ is Output.ErrorT -> {
+ it.error.message?.let { error -> showToast(error, this) }
+
+ }
+ else -> binding.isloading = true
+ }
+ }
+ binding.apply {
+ btnLogin.setOnClickListener {
+ credencials?.apply {
+ loginViewModel.checkFields(Login(binding.editTextUser.text.toString(), binding.editTextPassword.text.toString()))
+ }
+ }
+ }
+ }
+
+ fun showToast(message: String, context: Context) {
+ Toast.makeText(context, message, Toast.LENGTH_LONG).show()
+ }
+
+ fun createPersistence(idUser:String){
+ val sharedPreference = getSharedPreferences(getString(R.string.data_bank),Context.MODE_PRIVATE)
+ var editor = sharedPreference.edit()
+ editor.putString(getString(R.string.idUser),idUser)
+ editor.commit()
+ }
+
+
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/ui/screens/StatementsActivity.kt b/Bank/app/src/main/java/com/jisellemartins/bank/ui/screens/StatementsActivity.kt
new file mode 100644
index 000000000..c3ac4d549
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/ui/screens/StatementsActivity.kt
@@ -0,0 +1,65 @@
+package com.jisellemartins.bank.ui.screens
+
+import android.content.Context
+import android.os.Bundle
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.jisellemartins.bank.R
+import com.jisellemartins.bank.databinding.ActivityStatementsBinding
+import com.jisellemartins.bank.model.Statements
+import com.jisellemartins.bank.network.Output
+import com.jisellemartins.bank.ui.adapter.ListStatementsAdapter
+import com.jisellemartins.bank.viewmodel.StatementsViewModel
+import org.koin.androidx.viewmodel.ext.android.viewModel
+
+
+class StatementsActivity : AppCompatActivity() {
+
+ val statementsViewModel: StatementsViewModel by viewModel()
+ private lateinit var binding: ActivityStatementsBinding
+ private lateinit var adapter: ListStatementsAdapter
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityStatementsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ statementsViewModel.statementsLiveData.observe(this) {
+ binding.isloading = false
+ when (it) {
+ is Output.Success -> {
+ if (!it.data?.id.equals("0")) {
+ binding.textUser.text = it.data?.user?.user
+ binding.textAccount.text = it.data?.account
+ binding.textBalance.text = "R$ " + it.data?.balance.toString() + ",00"
+ initRecycleView(it.data?.statementsList ?: emptyList())
+ } else {
+ showToast("Não foi possível carregar os dados", this)
+ }
+ }
+ is Output.Error ->{
+ showToast("Não foi possível carregar os dados", this)
+ }
+ is Output.ErrorT -> {
+ it.error.message?.let { error -> showToast(error, this) }
+
+ }
+ else -> binding.isloading = true
+ }
+ }
+
+ val sharedPreference = getSharedPreferences(getString(R.string.data_bank), Context.MODE_PRIVATE)
+ val s = sharedPreference.getString(getString(R.string.idUser), "")
+ statementsViewModel.getDetails(s.toString())
+
+ }
+
+ private fun initRecycleView(statements: List) {
+ adapter = ListStatementsAdapter(statements)
+ binding.listStatements.adapter = adapter
+ binding.listStatements.layoutManager = LinearLayoutManager(this)
+ }
+ fun showToast(message: String, context: Context) {
+ Toast.makeText(context, message, Toast.LENGTH_LONG).show()
+ }
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/utils/CpfUtil.kt b/Bank/app/src/main/java/com/jisellemartins/bank/utils/CpfUtil.kt
new file mode 100644
index 000000000..c00b20e1e
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/utils/CpfUtil.kt
@@ -0,0 +1,71 @@
+package com.jisellemartins.bank.utils
+
+class CpfUtil {
+ companion object {
+
+ fun myValidateCPF(cpf: String): Boolean {
+ val cpfClean = cpf.replace(".", "").replace("-", "")
+
+
+ if (cpfClean.length != 11)
+ return false
+
+
+ try {
+ val number = cpfClean.toLong()
+ } catch (e: Exception) {
+ return false
+ }
+
+
+ var dvCurrent10 = cpfClean.substring(9, 10).toInt()
+ var dvCurrent11 = cpfClean.substring(10, 11).toInt()
+
+
+ val cpfNineFirst = IntArray(9)
+ var i = 9
+ while (i > 0) {
+ cpfNineFirst[i - 1] = cpfClean.substring(i - 1, i).toInt()
+ i--
+ }
+
+ var sumProductNine = IntArray(9)
+ var weight = 10
+ var position = 0
+ while (weight >= 2) {
+ sumProductNine[position] = weight * cpfNineFirst[position]
+ weight--
+ position++
+ }
+
+ var dvForTenthDigit = sumProductNine.sum() % 11
+ dvForTenthDigit = 11 - dvForTenthDigit //rule for tenth digit
+ if (dvForTenthDigit > 9)
+ dvForTenthDigit = 0
+ if (dvForTenthDigit != dvCurrent10)
+ return false
+
+
+ var cpfTenFirst = cpfNineFirst.copyOf(10)
+ cpfTenFirst[9] = dvCurrent10
+
+ var sumProductTen = IntArray(10)
+ var w = 11
+ var p = 0
+ while (w >= 2) {
+ sumProductTen[p] = w * cpfTenFirst[p]
+ w--
+ p++
+ }
+
+ var dvForeleventhDigit = sumProductTen.sum() % 11
+ dvForeleventhDigit = 11 - dvForeleventhDigit
+ if (dvForeleventhDigit > 9)
+ dvForeleventhDigit = 0
+ if (dvForeleventhDigit != dvCurrent11)
+ return false
+
+ return true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/utils/EmailUtil.kt b/Bank/app/src/main/java/com/jisellemartins/bank/utils/EmailUtil.kt
new file mode 100644
index 000000000..112625b5b
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/utils/EmailUtil.kt
@@ -0,0 +1,14 @@
+package com.jisellemartins.bank.utils
+
+import androidx.core.util.PatternsCompat
+
+class EmailUtil {
+
+ companion object{
+ fun CharSequence?.isValidEmail() =
+ !isNullOrEmpty() && PatternsCompat.EMAIL_ADDRESS.matcher(this).matches()
+ }
+
+}
+
+
diff --git a/Bank/app/src/main/java/com/jisellemartins/bank/viewmodel/LoginViewModel.kt b/Bank/app/src/main/java/com/jisellemartins/bank/viewmodel/LoginViewModel.kt
new file mode 100644
index 000000000..0ecff0980
--- /dev/null
+++ b/Bank/app/src/main/java/com/jisellemartins/bank/viewmodel/LoginViewModel.kt
@@ -0,0 +1,64 @@
+package com.jisellemartins.bank.viewmodel
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.jisellemartins.bank.extensions.toLiveData
+import com.jisellemartins.bank.model.Login
+import com.jisellemartins.bank.model.User
+import com.jisellemartins.bank.network.Output
+import com.jisellemartins.bank.repositories.BankRepository
+import com.jisellemartins.bank.utils.CpfUtil
+import com.jisellemartins.bank.utils.EmailUtil
+import com.jisellemartins.bank.utils.EmailUtil.Companion.isValidEmail
+import kotlinx.coroutines.launch
+
+class LoginViewModel(private val repository: BankRepository) : ViewModel() {
+ private val _loginLiveData = MutableLiveData