Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,22 @@ Com o passar do tempo identificamos alguns problemas que impedem esse aplicativo
Boa sorte! =)

Ps.: Fique à vontade para editar o projeto inteiro, organização de pastas e módulos, bem como as dependências utilizadas

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Olá, eu sou a Ana Carolina e é um prazer imenso estar fazendo parte desse processo seletivo.

Aqui está a minha solução para o desafio proposto.

# Desafio PicPay
- O aplicativo foi desenvolvido em Kotlin.
- Foi utilizado o padrão de arquitetura MVVM + Clean Architecture, dividindo nos packages data e ui (como domain é opcional e não escolhi fazer o uso de UseCases, esta camada não foi inserida na solução proposta mas é uma ótima abordagem
para escalabilidade da aplicação quando houver um maior dluxo de dados com serviços externos. Futuramente, essas camadas podem até mesmo ser dividadas em modulos para maior escalabilidade da aplicação.
- Foi utilizado o Retrofit para requisições HTTP.
- Foi utilizado o Room para persistência de dados.
- Foi utilizado o Picasso para carregamento de imagens.
- Foi utilizado o Koin para injeção de dependências.
- Foi utilizado o Compose para a declaração da UI.
- Foi utilizado o Kotlin Coroutines para a execução de tarefas assíncronas.
- Foi utilizado o Kotlin Flow para a persistência do estado da tela no ViewModel e para uma programação reativa a fim de manter a UI atualizada.

64 changes: 43 additions & 21 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
id 'kotlin-parcelize'
}

android {
compileSdkVersion 29
namespace "com.picpay.desafio.android"

defaultConfig {
applicationId "com.picpay.desafio.android"
minSdkVersion 21
targetSdkVersion 29
minSdkVersion 30
compileSdk 34
targetSdkVersion 34
versionCode 1
versionName "1.0"

Expand All @@ -28,14 +29,25 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
buildFeatures {
compose true
}

compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

composeOptions {
kotlinCompilerExtensionVersion = "1.5.12"
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
jvmTarget = JavaVersion.VERSION_17
}
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas".toString())
}
}
}

Expand All @@ -45,18 +57,22 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

implementation "androidx.core:core-ktx:$core_ktx_version"
implementation "androidx.compose.ui:ui"
implementation 'androidx.compose.material3:material3'
implementation 'androidx.compose.material3:material3-window-size-class:1.3.1'
implementation "androidx.compose.material:material-icons-extended"
implementation "androidx.compose.ui:ui-tooling-preview"
implementation "com.google.android.material:material:1.12.0"
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7'
implementation 'androidx.activity:activity-compose:1.9.3'

implementation "androidx.appcompat:appcompat:$appcompat_version"
implementation "androidx.constraintlayout:constraintlayout:$constraintlayout_version"

implementation "com.google.android.material:material:$material_version"

implementation "org.koin:koin-core:$koin_version"
implementation "org.koin:koin-android:$koin_version"
implementation "org.koin:koin-androidx-viewmodel:$koin_version"

implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
implementation "io.insert-koin:koin-core:$koin_version"
implementation "io.insert-koin:koin-android:$koin_version"

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
Expand All @@ -69,7 +85,7 @@ dependencies {
implementation "io.reactivex.rxjava2:rxjava:$rxjava_version"
implementation "io.reactivex.rxjava2:rxandroid:$rxandroid_version"

implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.google.code.gson:gson:2.10.1'

implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofit_version"
Expand All @@ -80,13 +96,19 @@ dependencies {
implementation "com.squareup.picasso:picasso:$picasso_version"
implementation "de.hdodenhof:circleimageview:$circleimageview_version"

implementation "androidx.room:room-runtime:2.6.1"
implementation "androidx.room:room-ktx:2.6.1"
kapt "androidx.room:room-compiler:2.6.1"

testImplementation "junit:junit:$junit_version"
testImplementation "org.mockito:mockito-core:$mockito_version"
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:$mockito_kotlin_version"
testImplementation "androidx.arch.core:core-testing:$core_testing_version"
implementation "org.koin:koin-test:$koin_version"
testImplementation "androidx.room:room-testing:2.6.1"
implementation "io.insert-koin:koin-test:$koin_version"

androidTestImplementation "androidx.test:runner:$test_runner_version"
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
androidTestImplementation "androidx.test:core-ktx:$core_ktx_test_version"
debugImplementation "androidx.compose.ui:ui-tooling"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
import com.picpay.desafio.android.ui.MainActivity
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
Expand Down
7 changes: 4 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.picpay.desafio.android">
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".PicPayApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
Expand All @@ -14,7 +14,8 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
<activity android:name=".MainActivity">
<activity android:name=".ui.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
75 changes: 0 additions & 75 deletions app/src/main/java/com/picpay/desafio/android/MainActivity.kt

This file was deleted.

21 changes: 21 additions & 0 deletions app/src/main/java/com/picpay/desafio/android/PicPayApplication.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.picpay.desafio.android

import android.app.Application
import com.picpay.desafio.android.data.database.di.databaseModule
import com.picpay.desafio.android.data.di.PicPayServiceFactory
import com.picpay.desafio.android.data.di.dataModule
import com.picpay.desafio.android.ui.di.appModule
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

class PicPayApplication : Application() {

override fun onCreate() {
super.onCreate()

startKoin {
androidContext(this@PicPayApplication)
modules(appModule, dataModule, PicPayServiceFactory().picPayServiceModule(), databaseModule)
}
}
}
11 changes: 0 additions & 11 deletions app/src/main/java/com/picpay/desafio/android/PicPayService.kt

This file was deleted.

34 changes: 0 additions & 34 deletions app/src/main/java/com/picpay/desafio/android/UserListAdapter.kt

This file was deleted.

Loading